第一题
假设有两种微生物 X 和 Y X出生后每隔3分钟分裂一次(数目加倍),Y出生后每隔2分钟分裂一次(数目加倍)。
一个新出生的X,半分钟之后吃掉1个Y,并且,从此开始,每隔1分钟吃1个Y。 现在已知有新出生的 X=10, Y=89,求60分钟后Y的数目。
如果X=10,Y=90 呢?
本题的要求就是写出这两种初始条件下,60分钟后Y的数目。
题目的结果令你震惊吗?这不是简单的数字游戏!真实的生物圈有着同样脆弱的性质!也许因为你消灭的那只 Y 就是最终导致 Y 种群灭绝的最后一根稻草!
请忍住悲伤,把答案写在“解答.txt”中,不要写在这里!
代码如下:
#include<stdio.h>
int main(){
int i,x,y;
while(scanf("%d%d",&x,&y))
{
for(i=1;i<=120;i++)
{
if(i%2)y-=x;
if(i%4==0)y*=2;
if(i%6==0)x*=2;
}
printf("%d",y);
}
return 0;
}
运行结果:
第二题
福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式: ABCDE * ? = EDCBA
他对华生说:“ABCDE应该代表不同的数字,问号也代表某个数字!”
华生:“我猜也是!”
于是,两人沉默了好久,还是没有算出合适的结果来。
请你利用计算机的优势,找到破解的答案。
把 ABCDE 所代表的数字写出来。
答案写在“解答.txt”中,不要写在这里!
暴力
代码如下:
#include<stdio.h>
int main(){
int a,b,c,d,e,f;
for(a=1;a<10;a++)
{
for(b=0;b<10;b++)
{ if(b==a)
continue;
for(c=0;c<10;c++)
{ if(c==a||c==b)
continue;
for(d=0;d<10;d++)
{ if(d==a||d==b||d==c)
continue;
for(e=1;e<10;e++)
{ if(e==a||e==b||e==c||e==d)
continue;
for(f=0;f<10;f++)
{
if(f==a||f==b||f==c||f==d||f==e)
continue;
if((a*10000+b*1000+c*100+d*10+e)*f==(e*10000+d*1000+c*100+b*10+a))
printf("%d%d%d%d%d",a,b,c,d,e);
}
}
}
}
}
}
return 0;
}
第三题
有一群海盗(不多于20人),在船上比拼酒量。过程如下:打开一瓶酒,所有在场的人平分喝下,有几个人倒下了。再打开一瓶酒平分,又有倒下的,再次重复...... 直到开了第4瓶酒,坐着的已经所剩无几,海盗船长也在其中。当第4瓶酒平分喝下后,大家都倒下了。 等船长醒来,发现海盗船搁浅了。他在航海日志中写到:“......昨天,我正好喝了一瓶.......奉劝大家,开船不喝酒,喝酒别开船......”
请你根据这些信息,推断开始有多少人,每一轮喝下来还剩多少人。
如果有多个可能的答案,请列出所有答案,每个答案占一行。
格式是:人数,人数,...
例如,有一种可能是:20,5,4,2,0
答案写在“解答.txt”中,不要写在这里!
暴力!!!
代码如下:
#include<stdio.h>
int main(){
int a,b,c,d;
for(a=20;a>=4;a--)
{
for(b=a-1;b>=3;b--)
{
for(c=b-1;c>=2;c--)
{
for(d=c-1;d>=1;d--)
{
if(1.0/a+1.0/b+1.0/c+1.0/d==1.0)
printf("%d %d %d %d 0\n",a,b,c,d);
}
}
}
}
return 0;
}
第四题
某电视台举办了低碳生活大奖赛。题目的计分规则相当奇怪:
每位选手需要回答10个问题(其编号为1到10),越后面越有难度。
答对的,当前分数翻倍;答错了则扣掉与题号相同的分数(选手必须回答问题,不回答按错误处理)。
每位选手都有一个起步的分数为10分。
某获胜选手最终得分刚好是100分,如果不让你看比赛过程,你能推断出他(她)哪个题目答对了,哪个题目答错了吗?
如果把答对的记为1,答错的记为0,则10个题目的回答情况可以用仅含有1和0的串来表示。例如:0010110011 就是可能的情况。
你的任务是算出所有可能情况。每个答案占一行。
答案写在“解答.txt”中,不要写在这里!
代码如下;
#include<stdio.h>
int main()
{
int mark;
int a[10];
for(a[1]=0;a[1]<=1;a[1]++)
for(a[2]=0;a[2]<=1;a[2]++)
for(a[3]=0;a[3]<=1;a[3]++)
for(a[4]=0;a[4]<=1;a[4]++)
for(a[5]=0;a[5]<=1;a[5]++)
for(a[6]=0;a[6]<=1;a[6]++)
for(a[7]=0;a[7]<=1;a[7]++)
for(a[8]=0;a[8]<=1;a[8]++)
for(a[9]=0;a[9]<=1;a[9]++)
for(a[10]=0;a[10]<=1;a[10]++)
{
mark=10;
for(int i=1;i<=10;i++)
{
if(a[i]==0)
mark-=i;
else
mark*=2;
}
if(mark==100)
{
for(int i=1;i<=10;i++)
printf("%d",a[i]);
printf("\n"); }
}
return 0;
}
第五题
对一个方阵转置,就是把原来的行号变列号,原来的列号变行号 例如,如下的方阵:
1 2 3 4
5 6 7 8
9 1011 12
13 14 15 16
转置后变为:
1 5 9 13
2 6 1014
3 7 1115
4 8 1216
但,如果是对该方阵顺时针旋转(不是转置),却是如下结果:
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(inti=0; i<rank * rank; i++) {
y[_________________________]= x[i]; // 填空 }
for(i=0;i<rank*rank; i++)
{ x[i]= y[i];
}
free(y);
}
int main(int argc, 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<rank; i++)
{
for(intj=0; j<rank; j++)
{
printf("%4d",x[i][j]);
}
printf("\n");
}
return0;
}
请分析代码逻辑,并推测划线处的代码。
答案写在 “解答.txt” 文件中
注意:只写划线处应该填的内容,划线前后的内容不要抄写。
第九题
足球比赛具有一定程度的偶然性,弱队也有战胜强队的可能。 假设有甲、乙、丙、丁四个球队。根据他们过去比赛的成绩,得出每个队与另一个队对阵时取胜的概率表:
甲 乙 丙 丁
甲 - 0.10.3 0.5
乙 0.9 - 0.70.4
丙 0.7 0.3 - 0.2
丁 0.5 0.6 0.8 -
数据含义:甲对乙的取胜概率为0.1,丙对乙的胜率为0.3,...
现在要举行一次锦标赛。双方抽签,分两个组比,获胜的两个队再争夺冠军。(参见【1.jpg】)
请你进行10万次模拟,计算出甲队夺冠的概率。
注意:
请仔细调试!您的程序只有能运行出正确结果的时候才有机会得分!
在评卷时使用的输入数据与试卷中给出的实例数据可能是不同的。
请把所有函数写在同一个文件中,调试好后,存入与【考生文件夹】下对应题号的“解答.txt”中即可。
相关的工程文件不要拷入。
源代码中不能能使用诸如绘图、Win32API、中断调用、硬件操作或与操作系统相关的API。
允许使用STL类库,但不能使用MFC或ATL等非ANSI c++标准的类库。例如,不能使用CString类型(属于MFC类库)。