围圈报数
1 /*围圈报数(谌海军) 2 题目描述: 3 有n(n<=100)围成一圈,顺序排号(从1排到n)。 4 从第一个人开始报数(从1报到m(m<=9)),凡报到m的人退出圈子, 5 问最后留下的是原来第几号的那位? 6 解题思路: 7 1、定义一个长度为100数组a,初始化为0; 8 2、接收键盘输入值n,m,数组a的前n-1个元素赋值为1~n; 9 3、建立两层嵌套循环,外循环至退出人数为n-1为止, 10 内循环中从0循环至n,将a数组中非0的数据逢m置零,同时记录退出人数; 11 4、循环全部结束后输出最后留下的一个a数组的非零元素的值。 12 输入描述: 13 输入为两个正整数,第一个<=100,第二个<=9; 14 输出描述描述: 15 输出为一个正整数; */ 16 #include <stdio.h> 17 #define N 100 18 void main() 19 { 20 int a[N]={0}; 21 int n,m; 22 int i; 23 int k=0,t=0,s; 24 scanf("%d%d",&n,&m); 25 s=n; 26 for(i=0;i<n;++i) 27 a[i]=i+1; 28 while(n>1) 29 { 30 if(a[k%s]!=0)//将K值不停的加,直到等于m 31 t++; 32 if(t==m) 33 { 34 n--; 35 a[k%s]=0;//将a[m]全变成0; 36 t=0; 37 } 38 k++; 39 } 40 for(i=0;i<s;++i) 41 { 42 if(a[i]!=0) 43 printf("%d",a[i]); 44 } 45 }
不要停下脚步。。