/* * 作者:刘克雄(转载请说明出处:http://liukexiong.iteye.com/) * n个人围成一圈,1,2,3循环报数,报到3的人退出.到最后只余1人,输出最后留下的是第几号 */ #include<stdio.h> #include<stdlib.h> /* * 用数组去模拟报数的过程 * n:数组中的元素个数 * given:报到几 */ int remain(int *a,int n,int given) { //现在报到几 int count=0; //数组中已经有多少位置1 int sum=0; //自己来控制变量i,因为i最后还要回到头部 int i; for(i=0;i<n;) { //程序退出条件 if(sum==n-1)break; //已经报过数 if(*(a+i)==1) { //到达数组末尾 if(i==n-1) { i=0; } else { i++; } } //没有报过数 else { count++; //报到指定的数 if(count==given) { //报数恢复为0 count=0; sum++; //置该位置为已经报过数 *(a+i)=1; } //到达数组末尾 if(i==n-1) { i=0; } else { i++; } } } for(int j=0;j<n;j++) { if(*(a+j)==0)break; } return j+1; } int main() { int a[]={0,0,0,0,0,0}; int n=sizeof(a)/sizeof(a[0]); int given=3; int result=remain(a,n,given); printf("最后留下的是第%d号\n",result); return 0; }