题目标题:
围圈报数(谌海军)
题目描述:
有n(n<=100)围成一圈,顺序排号(从1排到n)。 从第一个人开始报数(从1报到m(m<=9)),凡报到m的人退出圈子, 问最后留下的是原来第几号的那位?
解题思路:
1、定义一个长度为100数组a,初始化为0;
2、接收键盘输入值n,m,数组a的前n-1个元素赋值为1~n;
3、建立两层嵌套循环,外循环至退出人数为n-1为止, 内循环中从0循环至n,将a数组中非0的数据逢m置零,同时记录退出人数;
4、循环全部结束后输出最后留下的一个a数组的非零元素的值。
输入描述:
输入为两个正整数,第一个<=100,第二个<=9;
输出描述:
k 输出为一个正整数; 样式输入: 100 3 样式输出: 91
#include <stdio.h> void main () { int a[1000]={0},n,m,i=0,j=1,k; scanf("%d %d",&n,&m); for(k=0;k<n-1;) { if(a[i]!=m+1)/*报数*/ a[i]=j; else { for(;a[i]==m+1;)/*for语句是关键,可替为do while/while语句*/ { if(i==n-1) i=0; else i++; } a[i]=j; } /*报数*/ if (j==m) { j=1; a[i]=m+1; k++; } else j++; if(i==n-1) i=0; else i++; } /*输出最后留下的人的序号*/ for(i=0;i<n;i++) if(a[i]!=m+1) printf("%d",i+1); }