august 发表于 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

#include<stdio.h>
main()
{
       int aa;
       int i,j,k=1,m,n;
       printf("please.....m n\n");
       scanf("%d%d",&m,&n);
       for (i=0;i<m;i++) aa=i+1;//輸入每人編號
       for (i=0,j=1;j<=m;)
       {
             while (k<=n)
             {
                  i=(i+1)%m;
                  if (aa!=0) k++;
            }
             if (aa==1) aa=m+1;//避免輸出最大位置變成0  --->這裡不懂是什麼意思?
             printf("%6d",aa-1);      // 輸出剛出位置的   ----> 這裡為什麼要減一呢?
             aa=0;
             k=1;
             j++;
       }
}

shawind 发表于 2007-12-27 21:21:21

对数学无爱。只想到了个用循环链表的方法,和上面提供的这种办法完全无缘。

lw 发表于 2007-12-28 00:10:09

应该是注意把去掉的那个下一次不要算入里面阿?

美兽 发表于 2007-12-28 10:19:36

//因为顺序,所以当aa== 1时,其上一位,一定数组尾部,利用m+1返回尾部, +1 的原因是下面有个aa-1
if (aa==1) aa=m+1;//避免輸出最大位置變成0  --->這裡不懂是什麼意思?


//因为aa[]比实际数字大1,例如aa = 6
printf("%6d",aa-1);      // 輸出剛出位置的   ----> 這裡為什麼要減一呢?

另:算法蛮傻气的— —说着玩,别介意。

august 发表于 2007-12-28 16:57:30

利用m+1返匚膊浚?+1這裡剛好亂碼了   

美兽 发表于 2007-12-28 17:53:28

引用第4楼august于2007-12-28 16:57发表的:
利用m+1返匚膊浚?+1這裡剛好亂碼了   

利用m+1返回尾部, +1 的原因是下面有个aa-1

md3234 发表于 2008-2-5 21:55:24

用冒泡算法!!~~~

子陵~ 发表于 2008-2-10 17:03:09

看了半天总算看明白了~这个题我用pascal的时候做过~
我觉得好像每一部分都差着1,考虑起来蛮别扭的~如果舍去aa呢?
直接用aa到aa,让i即控制位置又控制下标~这样想起来方便一点
页: [1]
查看完整版本: 求道題的意思