国信蓝点杯软件程序设计大赛真题 1.docx
《国信蓝点杯软件程序设计大赛真题 1.docx》由会员分享,可在线阅读,更多相关《国信蓝点杯软件程序设计大赛真题 1.docx(13页珍藏版)》请在冰豆网上搜索。
国信蓝点杯软件程序设计大赛真题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年。
voidf(intyear)
{
char*x[]={"甲","乙","丙","丁","戊","己","庚","辛","壬","癸"};
char*y[]={"子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"};
intn=year-1984;
while(n<0)n+=60;
printf("%s%s\n",x[_______],y[_______]);
}
intmain(intargc,char*argv[])
{
f(1911);
f(1970);
f(2012);
return0;
}
请分析代码逻辑,并推测划线处的代码。
注意:
只写划线处应该填的内容,划线前后的内容不要抄写。
如果让你设计个程序,用什么变量保存身份证号码呢?
长整数可以吗?
不可以!
因为有人的身份证最后一位是"X"
实际上,除了最后一位的X,不会出现其它字母!
身份证号码18位=17位+校验码
校验码的计算过程:
例如:
身份证前17位=ABCDEFGHIJKLMNOPQ
A~Q每位数字乘以权值求和(每位数字和它对应的“权”相乘后累加)
17位对应的权值分别是:
7910584216379105842
求出的总和再对11求模
然后按下表映射:
余数012345678910
校验码:
10X98765432
下面的代码实现了校验过程,输入串为身份证前17位,返回了校验码。
charverifyCode(char*s)
{
staticintweight[]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
staticcharmap[]={'1','0','X','9','8','7','6','5','4','3','2'};
intsum=0;
for(inti=0;i<17;i++)
{
sum+=(______________)*weight[i];//填空
}
returnmap[____________];//填空
}
请分析代码逻辑,并推测划线处的代码。
注意:
只写划线处应该填的内容,划线前后的内容不要抄写。
对一方阵转置,就是把原来的行号变列号,原来的列号变行号个
例如,如下的方阵:
1234
5678
9101112
13141516
转置后变为:
15913
261014
371115
481216
但,如果是对该方阵顺时针旋转(不是转置),却是如下结果:
13951
141062
151173
161284
下面的代码实现的功能就是要把一个方阵顺时针旋转。
voidrotate(int*x,intrank)
{
int*y=(int*)malloc(___________________);//填空
for(inti=0;i{
y[_________________________]=x[i];//填空
}
for(i=0;i{
x[i]=y[i];
}
free(y);
}
intmain(intargc,char*argv[])
{
intx[4][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
intrank=4;
rotate(&x[0][0],rank);
for(inti=0;i{
for(intj=0;j{
printf("%4d",x[i][j]);
}
printf("\n");
}
return0;
}
请分析代码逻辑,并推测划线处的代码。
注意:
只写划线处应该填的内容,划线前后的内容不要抄写。
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
则输出:
0
0
5
6
8
12
3
3
5
1
1
3
8
5
注意:
请仔细调试!
您的程序只有能运行出正确结果的时候才有机会得分!
在评卷时使用的输入数据与试卷中给出的实例数据可能是不同的。
请把所有函数写在同一个文件中,调试好后,存入与【考生文件夹】下对应题号的“解答.txt”中即可。
相关的工程文件不要拷入。
源代码中不能能使用诸如绘图、Win32API、中断调用、硬件操作或与操作系统相关的API。
允许使用STL类库,但不能使用MFC或ATL等非ANSIc++标准的类库。
例如,不能使用CString类型(属于MFC类库)。
古罗马帝国开创了辉煌的人类文明,但他们的数字表示法的确有些繁琐,尤其在表示大数的时候,现在看起来简直不能忍受,所以在现代很少使用了。
之所以这样,不是因为发明表示法的人的智力的问题,而是因为一个宗教的原因,当时的宗教禁止在数字中出现0的概念!
罗马数字的表示主要依赖以下几个基本符号:
I1
V5
X10
L50
C100
D500
M1000
这里,我们只介绍一下1000以内的数字的表示法。
单个符号重复多少次,就表示多少倍。
最多重复3次。
比如:
CCC表示300XX表示20,但150并不用LLL表示,这个规则仅适用于IXCM。
如果相邻级别的大单位在右,小单位在左,表示大单位中扣除小单位。
比如:
IX表示9IV表示4XL表示40更多的示例参见下表,你找到规律了吗?
I,1
II,2
III,3
IV,4
V,5
VI,6
VII,7
VIII,8
IX,9
X,10
XI,11
XII,12
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或ATL等非ANSIc++标准的类库。
例如,不能使用CString类型(属于MFC类库)。
a)2x3=6个方格中放入ABCDE五个字母,右下角的那个格空着。
如图【1.jpg】所示。
b)
c)和空格子相邻的格子中的字母可以移动到空格中,比如,图中的C和E就可以移动,移动后的局面分别是:
d)
e)AB
f)DEC
g)
h)ABC
i)DE
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
zz)
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或ATL等非ANSIc++标准的类库。
例如,不能使用CString类型(属于MFC类库)。
tt)
uu)
vv)
ww)
xx)
yy)
zzz)
aaa)
bbb)