广告Logo
目录 综合报道 软件世界 硬件周刊 大众网络 OA专刊 游戏广场 评测与市场
当前位置:电脑报电子版 > 1999 年 > 22 期 > 软件世界 > 9905请你编程

《 9905请你编程 》

  大家好!《请你编程》又与你们见面了。《请你编程》得到了广大朋友的关心和支持,我在这里表示衷心的感谢!在每次的来稿中,有发电子邮件的,也有寄磁盘稿的,还有直接邮寄稿件的,为了对读者朋友负责,我们都进行了仔细的测试,尽量选出优秀的作品奉献给大家。《请你编程》是一个读者朋友直接参与的栏目,是一个体现自我的园地,希望有编程愿望的初学者朋友也参与进来,因为这是一个大家的栏目,“重在参与”是我们的宗旨,无论是对编程高手,还是初学者,我们都会认真对待每一份作品。现在请看本期四川读者汤勇的程序。
  9905请你编程解题思路
  把核物质记为1,非核物质记为0,则每一种组合可看成一个二进制数。当坑数为i时(i<32),所有核物质与非核物质的组合可看成是二进制整数00...0(i个0)到11...1(i个1)区间的所有二进制整数(包括两个端点),因为该区间的所有二进制整数代表了有i个坑时所有的0、1的组合(对于不足i位的二进制整数前面补0)。把所有这些二进制整数转换成十进制数就是从0到2^(i-1)+2^(i-2)+...+2^1+2^0(2^i-1)之间的所有整数。因此,当坑数为i时,核物质与非核物质的组合共有2^i-1+1=2^i种。
  本程序主要采用了函数的递归调用:从i个坑会发生爆炸的组合与i-1个坑会发生爆炸的组合的关系来看,i情况是i-1情况的延伸,即i个坑会发生爆炸的组合总数可由i-1个坑会发生爆炸的组合总数推出。i个坑会发生爆炸的组合总数可分为三种情况:
  1.在i-1个坑会发生爆炸的所有组合前面加上0而得,如4个坑会发生爆炸的所有组合1111,1110,0111前加0得01111,01110,00111为5个坑时会发生爆炸的组合;
  2. 在i-1个坑会发生爆炸的所有组合前面加上1而得,如4个坑会发生爆炸的所有组合1111,1110,0111前加1得11111,11110,10111为5个坑时会发生爆炸的组合;
  3. 在i-1个坑时不会发生爆炸的组合中,前两个数为1,第三个数为0,而第三个数以后又没有三个1连续在一起,此种情况的所有组合前加1而得,如4个坑时这种情况的组合有1100,1101,前加1得11100,11101成为了5个坑时会发生爆炸的组合。
  故有:i个坑会发生爆炸的组合总数=( i-1)个坑会发生爆炸的组合总数*2+ (i-4)个坑时不会发生爆炸的组合总数;而(i-4)个坑不会发生爆炸的组合总数=(i-4)个坑的组合总数(即2^(i-4))- (i-4)个坑会发生爆炸的组合总数。
  源程序
  #include ″stdio.h″
  #include ″math.h″
  long account(n)
  int n;
  { long possible_number;/*该变量求取会发生爆炸的组合总数*/
  if (n<3) possible_number=0;
  else if (n==3) possible_number=1;
  /*将坑数为3时会发生爆炸的组合总数设为已知,用作递推的基数*/
  else
  possible_number=2*account(n-1)+(long)pow(2,n-4)-account(n-4);
  /*坑数为n时会发生爆炸的组合总数=2*坑数为n-1时会发生爆炸的组合总数+坑数为n-4时的组合总数-坑数为n-4时会发生爆炸的组合总数*/
  return(possible_number); }
  main()
  { int hole_number,n,i;/*hole_number为坑数,n读取howmany.txt中第一个数*/
  FILE *fp;
  printf(″\n″);   if ((fp=fopen(″c:\Mywork\howmany.txt″,″r″))==NULL)
  { printf(″\nCan not open file howmany.txt!″);
  getch();exit(1); }
  fscanf(fp,″%d″,&n);
  for (i=1;i<=n;i++)
  { fscanf(fp,″%d″,&hole_number);
  printf(″\n%d %ld″,hole_number,account(hole_number)); } }
  9907请你编程题目
  1999年4月1日愚人节,天文台收到一组外星人的信息,但无人能理解其含义。于是天文台方面请了一批专家,分析这段信息的意思。经过专家的努力,发现这段信息中的数字部分有如下特点:
  1、外星人也采取10进制,他们的数也是由0到9十个数字组成的。
  2、对于一位数,外星人的表示方法与我们一致。
  3、对于二位以上的数,其特点是:高位的数字总是比低位的数字大,否则为非法。例如:642是合法的,但645和644就是非法的。
  4、外星数字排列是连续的,且比较大小的方法和地球人一致。例如:外星数字10代表地球数字10,外星数字20代表地球数字11,外星数字21代表地球数字12。
  现在请你编一个程序,负责在地球数字和外星数字之间进行翻译。程序要求如下:
  1、输入数据从文本文件UFO.TXT读取。文本格式为:第一行为两个整数M,N。表示有M个地球数字要翻译成外星数字,有N个外星数字要翻译成地球数字。以下M行,每行有一个地球数字;再以下N行,每行有一个合法的外星数字。地球数字翻译后不会大于9876543210,外星数字也不会大于9876543210。
  2、输出到屏幕,每个翻译结果占一行,前M行为地球数字翻译的结果,后N行为外星数字翻译的结果。
  本次题目由上海的OldBug提供。
  输入范例:
  1,1
  11
  21
  输出范例:
  20
  12
  来稿请寄磁盘稿或用E-mail投稿,请写明解题思路和源程序(包含详细的注解),将来稿寄到电脑报编辑部的收信地址或E-mail邮箱,同时欢迎提供请你编程的题目。来稿截止日期:1999年7月15日
  本期获奖者名单
  杨玉琦(天津)陈 鹏(吉林)潘龙刚(江苏) 贺长安(湖南)
  刘永锋(河北)游 强(重庆)马拥军(浙江) 陆文杰(广东)
  丁晓华(江苏)林 勇(新疆)
  每位获奖者将获得苦丁香公司提供的光盘一张。
下载本期推荐软件页 首

《电脑报》版权所有,电脑报网站编辑部设计制作发布