历届初赛真题详解

第一题

假设有两种微生物 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类库)。





 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值