找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 3680|回复: 7

[通用编程] 求道題的意思

[复制链接]
发表于 2007-12-27 17:43:44 | 显示全部楼层 |阅读模式
這樣一個題,一群人圍在一起,然後數數 比如10個人,數到4的人退出,然後已退出的位置不再數,直到所有人退出
如10個人的編號是:1,2,3,4,5,6,7,8,9,10
   出來的次序是:4 , 8 , 2 , 7 , 3 , 10 , 9 , 1 , 6 , 5
  1. #include<stdio.h>
  2. main()
  3. {
  4.        int aa[255];
  5.        int i,j,k=1,m,n;
  6.        printf("please.....m n\n  ");
  7.        scanf("%d%d",&m,&n);
  8.        for (i=0;i<m;i++) aa[i]=i+1;  //輸入每人編號
  9.        for (i=0,j=1;j<=m;)
  10.        {
  11.              while (k<=n)
  12.              {
  13.                   i=(i+1)%m;
  14.                   if (aa[i]!=0) k++;
  15.               }
  16.              if (aa[i]==1) aa[i]=m+1;  //避免輸出最大位置變成0  --->這裡不懂是什麼意思?
  17.              printf("%6d",aa[i]-1);      // 輸出剛出位置的   ----> 這裡為什麼要減一呢?
  18.              aa[i]=0;
  19.              k=1;
  20.              j++;
  21.        }
  22. }
复制代码
发表于 2007-12-27 21:21:21 | 显示全部楼层
对数学无爱。只想到了个用循环链表的方法,和上面提供的这种办法完全无缘。 [s:5]
发表于 2007-12-28 00:10:09 | 显示全部楼层
应该是注意把去掉的那个下一次不要算入里面阿?
发表于 2007-12-28 10:19:36 | 显示全部楼层
  1. //因为顺序,所以当aa[i]== 1时,其上一位,一定数组尾部,利用m+1返回尾部, +1 的原因是下面有个aa[i]-1
  2. if (aa[i]==1) aa[i]=m+1;  //避免輸出最大位置變成0  --->這裡不懂是什麼意思?
  3. //因为aa[]比实际数字大1,例如aa[5] = 6
  4. printf("%6d",aa[i]-1);      // 輸出剛出位置的   ----> 這裡為什麼要減一呢?
  5. 另:算法蛮傻气的— —说着玩,别介意。
复制代码
 楼主| 发表于 2007-12-28 16:57:30 | 显示全部楼层
利用m+1返匚膊浚?+1  這裡剛好亂碼了   [s:5]
发表于 2007-12-28 17:53:28 | 显示全部楼层
引用第4楼august于2007-12-28 16:57发表的  :
利用m+1返匚膊浚?+1  這裡剛好亂碼了   [s:5]

利用m+1返回尾部, +1 的原因是下面有个aa-1
发表于 2008-2-5 21:55:24 | 显示全部楼层
用冒泡算法!!~~~
发表于 2008-2-10 17:03:09 | 显示全部楼层
看了半天总算看明白了~这个题我用pascal的时候做过~
我觉得好像每一部分都差着1,考虑起来蛮别扭的~如果舍去aa[0]呢?
直接用aa[1]到aa[m],让i即控制位置又控制下标~这样想起来方便一点
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|幻想森林

GMT+8, 2026-11-6 17:25 , Processed in 0.020581 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表