求道題的意思
這樣一個題,一群人圍在一起,然後數數 比如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++;
}
}
对数学无爱。只想到了个用循环链表的方法,和上面提供的这种办法完全无缘。 应该是注意把去掉的那个下一次不要算入里面阿? //因为顺序,所以当aa== 1时,其上一位,一定数组尾部,利用m+1返回尾部, +1 的原因是下面有个aa-1
if (aa==1) aa=m+1;//避免輸出最大位置變成0 --->這裡不懂是什麼意思?
//因为aa[]比实际数字大1,例如aa = 6
printf("%6d",aa-1); // 輸出剛出位置的 ----> 這裡為什麼要減一呢?
另:算法蛮傻气的— —说着玩,别介意。 利用m+1返匚膊浚?+1這裡剛好亂碼了 引用第4楼august于2007-12-28 16:57发表的:
利用m+1返匚膊浚?+1這裡剛好亂碼了
利用m+1返回尾部, +1 的原因是下面有个aa-1 用冒泡算法!!~~~ 看了半天总算看明白了~这个题我用pascal的时候做过~
我觉得好像每一部分都差着1,考虑起来蛮别扭的~如果舍去aa呢?
直接用aa到aa,让i即控制位置又控制下标~这样想起来方便一点
页:
[1]