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

《 9904请你编程 》

  朋友们,大家好!《请你编程》又与你们见面了。本期参与的读者朋友非常多,基本上都能找到程序的编程思路并得出正确答案。但有些朋友在来稿中只写了详细地址和邮编,而没有署名,请这些朋友在以后参与时不要忘记署名。希望朋友们继续保持投稿的热情,关心和支持《请你编程》栏目。现在,请看四川读者何苦的答案。
  9904请你编程解题思路
  1.数字1放在第一行的中间一列;
  2.从数字2到(n×n)各数,每一个数字存放的行是前一个数的行数减1,列数加1;
  3.如果上一数的行数等于1,则下一个数的行数为n;
  4.如果上一数的列数等于n,则下一数的列数等于1,行数等于上一数的行数减1;
  5.如按上面规则确定的位置上已经有数时,或者上一个数是第1行第n列时,则把下一个数放在上一个数的下面。
  源程序
  main( )
  {int n,i,j,k,x,y;
  static int t[16][16];
  loop: printf(″input (0   scanf(″%d″,&n);
  if ((n%2==0)||(n<0)||(n>15))
  {printf(″this n is not use\n″;
  goto loop;} /*如果n值不满足,则继续输入*/
  else
  {j=1;
  k=(n+1)/2;
  t[j][k]=1; /*第一种情况*/
  x=j;
  y=k;
  for(i=2;i<(n*n+1);i++)
  { j=j-1; /*第二种情况*/
  k=k+1;   if((j<1)&&(k>n))
  {j=j+2;
  k=k-1;}
  else
  {if (k>n) k=1; /*第四种情况*/
  else if (j<1) j=n;} /*第三种情况*/
  if (t[j][k]==0) t[j][k]=i; /*第五种情况*/
  else
  {j=x+1;
  k=y;
  t[j][k]=i;}
  x=j;
  y=k; }}
  for(j=1;j<(n+1);j++) /*打印n×n矩阵*/
  for(k=1;k<(n+1);k++)
  {printf(″%4d″,t[j][k]);
  if (k==n) printf(″\n″);}}
  9906请你编程题目
  大家都看过大回转的滑雪比赛,选手在从山上滑下来的时候,要绕过一些旗子。现在也要举行一场大回转的滑雪比赛,但规则有些不一样:
  1.赛会提供若干面旗子,每一面旗子上都标有一个正整数,作为旗子的编号。这个编号纯粹是一个随机数,既不一定唯一也不一定连续。这些旗子插在选手从山上滑下来的路上。
  2.选手在下滑的过程中,可以自由选择是否要绕过某些旗子。但是,如果选手绕过了一面旗子,该旗子的编号为N,下次他就不能绕过所有编号小于N的旗子。例如:如果选手绕过了编号为10的旗子,他就不能再绕过所有编号为1到10的旗子。
  3.在从山上滑下来的选手中,绕过的旗子的数目最多的人获胜。(可以并列)
  现在,请你编一个程序,帮选手算一下要绕过多少面旗子才可保证获胜。
  程序要求如下:
  数据从文本文件skate.txt中读出,格式如下:
  1.第一行为一个整数N,表示以下有N组输入数据,其中N<=10。
  2.每组输入数据格式为:第一行为一个整数M,表示该组数据中有M面旗子。第二行包括M个整数,整数间用空格分开,表示从上到下的M面旗子的编号。其中1<=M<=30000,1<=旗子编号<=65535。
  输出到屏幕,输出共为N行。每行包括一个整数K,表示选手要绕过K面旗子才可保证获胜。
  输入范例:
  1
  6
  4 3 3 4 5 1
  输出范例:
  3
  欢迎提供支持超大规模数据的程序,M可达到3,000,000,旗子编号可达6,000,000。本期题目由上海的Oldbug提供。   来稿请寄磁盘稿或用E-mail投稿,请写明解题思路和源程序(包含详细的注解),将来稿寄到电脑报编辑部的收信地址或E-mail邮箱,同时欢迎提供请你编程的题目。来稿截止日期:1999年6月15日
  本期获奖者名单
  张东晓(湖南) 徐 波(重庆) 韦岳阳(广西)
  王正谋(广东) 刘 军(江西) 杜重德(浙江)
  车生兵(湖南) 李 阳(新疆) 廖 恒(山西)
  胡立军(黑龙江)
  每位获奖者将获得苦丁香公司提供的光盘一张。
下载本期推荐软件页 首

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