整体思路:我们运用数组,将数组赋值1到n,然后开始循环。从a[0]开始,a[0]=1,a[1]=2,则把a[1]赋值为0,每数到‘2’的那个数组,就把它赋值为0。下面的循环,若a[i]=0则跳过不数。 include "stdio.h" int mian() { int a[1000]; int i,n,p=0,q; while(scanf("%d",&n)!=EOF)//输入总人数n { q=n;//把人数n赋给q,避免下面改变n的值 for(i=0;i<n;i++) a[i]=i+1;//给数组赋值,从1开始 for(i=0;;i++) { if(i==n)//从i=0开始轮回,当i=n时,即报数到最后一个人的时候,返回第一个人 i=0; if(a[i]!=0)//当a[i]!=0时,p+1 p++; else continue; if(p%2==0)//当p是个正偶数的时候 { a[i]=0;//把0赋给a[i] q--;//总人数减1 } if(q==1) break;//当最后只剩下一个人的时候,跳出循环 } for(i=0;i<n;i++)//因为每数到2的人就被赋予0,所以循环整个列表,找到不为零的那个值的下标 if(a[i]!=0) printf("%d\n",a[i]); } return 0;