您的位置:首页 > 其它

长理ACM 13-围圈报数(谌海军)

2016-03-12 23:47 225 查看
题目标题:
围圈报数(谌海军)

题目描述:
有n(n<=100)围成一圈,顺序排号(从1排到n)。从第一个人开始报数(从1报到m(m<=9)),凡报到m的人退出圈子,问最后留下的是原来第几号的那位?

输入描述:
输入为两个正整数,第一个<=100,第二个<=9;

输出描述:
输出为一个正整数;

样式输入:
100 3

样式输出:
91

编写代码:

#include<stdio.h>
int main()
{
int a[100];
int n, m, i, sum = 0, k = 0;
scanf("%d%d", &n, &m);
for(i = 0; i < n; i++)
a[i] = i + 1;
while(sum >= 0)
{
for(i = 0; i < n; i++)
if(a[i] != 0)
{
k++;
if(k == m) {a[i] = 0; k = 0; sum++;}
}
if(sum == n-1) break;
else i = 0;
}
for(i = n-1; i >= 0; i--)
if(a[i] != 0) printf("%d", a[i]);
return 0;
}


View Code
解题思路:
1、定义一个长度为100数组a,初始化为0;
2、接收键盘输入值n,m,数组a的前n-1个元素赋值为1~n;
3、建立两层嵌套循环,外循环至退出人数为n-1为止,内循环中从0循环至n,将a数组中非0的数据逢m置零,同时记录退出人数;
4、循环全部结束后输出最后留下的一个a数组的非零元素的值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: