国信蓝点杯软件程序设计大赛真题 (1)

国信蓝点杯软件程序设计大赛真题 (1)
国信蓝点杯软件程序设计大赛真题 (1)

2012国信蓝点杯软件程序设计大赛真题

造成高房价的原因有许多,比如土地出让价格。既然地价高,土地的面积必须仔细计算。遗憾的是,有些地块的形状不规则,比如是如图【1.jpg】中所示的五边形。

一般需要把它划分为多个三角形来计算。

已知三边求三角形的面积需要用海伦定理,参见【2.jpg】

各条边长数据如下:

AB = 52.1

BC = 57.2

CD = 43.5

DE = 51.9

EA = 33.4

EB = 68.2

EC = 71.9

根据这些数据求五边形地块的面积。四舍五入到小数后两位。

大数学家欧拉在集市上遇到了本村的两个农妇,每人跨着个空篮子。她们和欧拉打招呼说两人刚刚卖完了所有的鸡蛋。欧拉随便问:“卖了多少鸡蛋呢?”不料一个说:“我们两人自己卖自己的,一共卖了150个鸡蛋,虽然我们卖的鸡蛋有多有少,但刚好得了同样的钱数。你猜猜看!”欧拉猜不出。另一个补充道:“如果我按她那样的价格卖,可以得到32元;如果她按我的价格卖,可以得到24.5元”。欧拉想了想,说出了正确答案。

我们不是数学家,懒得列出公式来分析。但计算机可以“暴力破解”,就是把所有可能情况都试验一遍,撞上为止!

请写出每人鸡蛋的数目(顺序不限),用逗号隔开。

福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式:ABCDE * ? = EDCBA他对华生说:“ABCDE应该代表不同的数字,问号也代表某个数字!”华生:“我猜也是!”于是,两人沉默了好久,还是没有算出合适的结果来。请你利用计算机的优势,找到破解的答案。把ABCDE 所代表的数字写出来。

小明刚上小学,学会了第一个扑克牌“魔术”,到处给人表演。魔术的内容是这样的:他手里握着一叠扑克牌:A,2,....J,Q,K 一共13张。他先自己精心设计它们的顺序,然后正面朝下拿着,开始表演。只见他先从最下面拿一张放到最上面,再从最下面拿一张翻开放桌子上,是A;然后再从最下面拿一张放到最上面,再从最下面拿一张翻开放桌子上,是2;......如此循环直到手中只有一张牌,翻开放桌子上,刚好是K。这时,桌上牌的顺序是:A,2,3,4,5,6,7,8,9,10,J,Q,K 请你计算一下,小明最开始的时候手里牌的顺序是怎样的。结果写出来,逗号分割,小明“魔术”开始时,最下面的那张牌输出为第一个数据。考场不提供扑克牌,你只能用计算机模拟了,撕碎草稿纸模拟扑克属于作弊行为!另外,你有没有把录像倒着放过?很有趣的!回去试试!

在我国古代和近代,一直采用干支法纪年。它采用10天干和12地支配合,一个循环周期为60年。

10天干是:甲,乙,丙,丁,戊,己,庚,辛,壬,癸

12地支是:子,丑,寅,卯,辰,巳,午,未,申,酉,戌,亥

如果某年是甲子,下一年就是乙丑,再下是丙寅,......癸酉,甲戌,乙亥,丙子,....总之天干、地址都是循环使用,两两配对。今年(2012)是壬辰年,1911年辛亥革命

下面的代码根据公历年份输出相应的干支法纪年。已知最近的甲子年是1984年。

void f(int year)

{

char* x[] = {"甲","乙","丙","丁","戊","己","庚","辛","壬","癸"};

char* y[] = {"子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"};

int n = year - 1984;

while(n<0) n += 60;

printf("%s%s\n", x[_______], y[_______]);

}

int main(int argc, char* argv[])

{

f(1911);

f(1970);

f(2012);

return 0;

}

请分析代码逻辑,并推测划线处的代码。

注意:只写划线处应该填的内容,划线前后的内容不要抄写。

如果让你设计个程序,用什么变量保存身份证号码呢?长整数可以吗?不可以!

因为有人的身份证最后一位是"X"

实际上,除了最后一位的X,不会出现其它字母!

身份证号码18位= 17位+ 校验码

校验码的计算过程:

例如:身份证前17位= ABCDEFGHIJKLMNOPQ

A~Q 每位数字乘以权值求和(每位数字和它对应的“权”相乘后累加)17位对应的权值分别是:

7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2

求出的总和再对11求模

然后按下表映射:

余数0 1 2 3 4 5 6 7 8 9 10

校验码:1 0 X 9 8 7 6 5 4 3 2

下面的代码实现了校验过程,输入串为身份证前17位,返回了校验码。

char verifyCode(char* s)

{

static int weight[] = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};

static char map[] = {'1','0','X','9','8','7','6','5','4','3','2'};

int sum = 0;

for(int i=0; i<17; i++)

{

sum += (______________) * weight[i]; // 填空

}

return map[____________]; // 填空

}

请分析代码逻辑,并推测划线处的代码。

注意:只写划线处应该填的内容,划线前后的内容不要抄写。

对一方阵转置,就是把原来的行号变列号,原来的列号变行号个

例如,如下的方阵:

1 2 3 4

5 6 7 8

9 10 11 12

13 14 15 16

转置后变为:

1 5 9 13

2 6 10 14

3 7 11 15

4 8 12 16

但,如果是对该方阵顺时针旋转(不是转置),却是如下结果:

13 9 5 1

14 10 6 2

15 11 7 3

16 12 8 4

下面的代码实现的功能就是要把一个方阵顺时针旋转。

void rotate(int* x, int rank)

{

int* y = (int*)malloc(___________________); // 填空

for(int i=0; i

{

y[_________________________] = x[i]; // 填空}

for(i=0; i

{

x[i] = y[i];

}

free(y);

}

int main(int argc, char* argv[])

{

int x[4][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};

int rank = 4;

rotate(&x[0][0], rank);

for(int i=0; i

{

for(int j=0; j

{

printf("%4d", x[i][j]);

}

printf("\n");

}

return 0;

}

请分析代码逻辑,并推测划线处的代码。

注意:只写划线处应该填的内容,划线前后的内容不要抄写。

30年的改革开放,给中国带来了翻天覆地的变化。2011全年中国手机产量约为11.72亿部。手机已经成为百姓的基本日用品!

给手机选个好听又好记的号码可能是许多人的心愿。但号源有限,只能辅以有偿选号的方法了。

这个程序的目的就是:根据给定的手机尾号(4位),按照一定的规则来打分。其规则如下:

1. 如果出现连号,不管升序还是降序,都加5分。例如:5678,4321都满足加分标准。

2. 前三个数字相同,或后三个数字相同,都加3分。例如:4888,6665,7777都满足加分的标准。注意:7777因为满足这条标准两次,所以这条规则给它加了6分。

3. 符合AABB或者ABAB模式的加1分。例如:2255,3939,7777都符合这个模式,所以都被加分。注意:7777因为满足这条标准两次,所以这条标准给它加了2分。

4. 含有:6,8,9中任何一个数字,每出现一次加1分。例如4326,6875,9918都符合加分标准。其中,6875被加2分;9918被加3分。

尾号最终得分就是每条标准的加分总和!

要求程序从标准输入接收数据,在标准输出上输出结果。

输入格式为:第一行是一个整数n(<100),表示下边有多少输入行,接下来是n 行4位一组的数据,就是等待计算加分的手机尾号。

输出格式为:n行整数。

例如,输入:

14

3045

0211

2345

6543

7777

8888

7878

7788

6688

2424

2244

9918

6789

8866

则输出:

5

6

8

12

3

3

5

1

1

3

8

5

注意:

请仔细调试!您的程序只有能运行出正确结果的时候才有机会得分!

在评卷时使用的输入数据与试卷中给出的实例数据可能是不同的。

请把所有函数写在同一个文件中,调试好后,存入与【考生文件夹】下对应题号的“解答.txt”中即可。

相关的工程文件不要拷入。

源代码中不能能使用诸如绘图、Win32API、中断调用、硬件操作或与操作系统相关的API。

允许使用STL类库,但不能使用MFC或A TL等非ANSI c++标准的类库。例如,不能使用CString类型(属于MFC类库)。

古罗马帝国开创了辉煌的人类文明,但他们的数字表示法的确有些繁琐,尤其在表示大数的时候,现在看起来简直不能忍受,所以在现代很少使用了。之所以这样,不是因为发明表示法的人的智力的问题,而是因为一个宗教的原因,当时的宗教禁止在数字中出现0的概念!

罗马数字的表示主要依赖以下几个基本符号:

I 1

V 5

X 10

L 50

C 100

D 500

M 1000

这里,我们只介绍一下1000以内的数字的表示法。

单个符号重复多少次,就表示多少倍。最多重复3次。比如:CCC表示300 XX 表示20,但150并不用LLL表示,这个规则仅适用于I X C M。

如果相邻级别的大单位在右,小单位在左,表示大单位中扣除小单位。比如:IX 表示9 IV表示4 XL表示40 更多的示例参见下表,你找到规律了吗?

I,1

II,2

III,3

IV,4

V,5

VI,6

VII,7

VIII,8

IX,9

X,10

XI,11

XIII,13

XIV,14

XV,15

XVI,16

XVII,17

XVIII,18

XIX,19

XX,20

XXI,21

XXII,22

XXIX,29

XXX,30

XXXIV,34

XXXV,35

XXXIX,39

XL,40

L,50

LI,51

LV,55

LX,60

LXV,65

LXXX,80

XC,90

XCIII,93

XCV,95

XCVIII,98

XCIX,99

C,100

CC,200

CCC,300

CD,400

D,500

DC,600

DCC,700

DCCC,800

CM,900

CMXCIX,999

本题目的要求是:请编写程序,由用户输入若干个罗马数字串,程序输出对应的十进制表示。

输入格式是:第一行是整数n,表示接下来有n个罗马数字(n<100)。以后每行一个

罗马数字。罗马数字大小不超过999。

要求程序输出n行,就是罗马数字对应的十进制数据。

例如,用户输入:

3

LXXX

XCIII

DCCII

则程序应该输出:

80

93

702

注意:

请仔细调试!您的程序只有能运行出正确结果的时候才有机会得分!

在评卷时使用的输入数据与试卷中给出的实例数据可能是不同的。

请把所有函数写在同一个文件中,调试好后,存入与【考生文件夹】下对应题号的“解答.txt”中即可。

相关的工程文件不要拷入。

源代码中不能能使用诸如绘图、Win32API、中断调用、硬件操作或与操作系统相关的API。

允许使用STL类库,但不能使用MFC或A TL等非ANSI c++标准的类库。例如,不能使用CString类型(属于MFC类库)。

a)2x3=6个方格中放入ABCDE五个字母,右下角的那个格空着。如图【1.jpg】所示。

b)

c)和空格子相邻的格子中的字母可以移动到空格中,比如,图中的C和E就可

以移动,移动后的局面分别是:

d)

e) A B

f) D E C

g)

h) A B C

i) D E

j)

k)为了表示方便,我们把6个格子中字母配置用一个串表示出来,比如上边的两种局面分别表示为:

l)

m)AB*DEC

n)ABCD*E

o)

p)题目的要求是:请编写程序,由用户输入若干表示局面的串,程序通过计算,输出是否能通过对初始状态经过若干次移动到达该状态。可以实现输出1,否则输出0。初始状态为:ABCDE*

q)

r)用户输入的格式是:先是一个整数n,表示接下来有n行状态。程序输出也应该是n行1或0

s)

t)例如,用户输入:

u)

v) 3

w)ABCDE*

x)AB*DEC

y)CAED*B

z)

aa)则程序应该输出:

bb) 1

cc) 1

dd)0

ee)

ff)

gg)注意:

hh)

ii)请仔细调试!您的程序只有能运行出正确结果的时候才有机会得分!

jj)

kk)在评卷时使用的输入数据与试卷中给出的实例数据可能是不同的。

ll)

mm)请把所有函数写在同一个文件中,调试好后,存入与【考生文件夹】下对应题号的“解答.txt”中即可。

nn)

oo)相关的工程文件不要拷入。

pp)

qq)源代码中不能能使用诸如绘图、Win32API、中断调用、硬件操作或与操作系统相关的API。

rr)

ss)允许使用STL类库,但不能使用MFC或A TL等非ANSI c++标准的类库。例如,不能使用CString类型(属于MFC类库)。

tt) uu)

vv) ww) xx) yy) zz) aaa) bbb)

相关主题
相关文档
最新文档