Author:MTingle
人工智能专业
荃者所以在鱼,得鱼而忘荃;蹄者所以在兔,得兔而忘蹄;言者所以在意,得意而忘 言。吾安得夫忘言之人而与之言哉!
[C语言]用数组实现报数报数
提示:以下是本篇文章正文内容,下面案例可供参考
一、库包含
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
二、步骤
1.设置一个数组存储总人数,假设n个人报数,报到m的人出圈,同时用cnt计算一共出局的人数
int a[100] = { 0 };
int m, n;
scanf("%d%d", &n, &m);
int cnt = 0,k=0,i=0;//cnt为目前出局人数,总共有n人,报数到m出局
2.开始报数
while (cnt != n)
{
i++;
if (i > n)i = 1;
if (a[i] == 0)
{
k++;
if(k==m)
{
a[i] = 1;
cnt++;
printf("\t%d", i);
k = 0;//清空k,重新从1开始报数
}
}
}
(注:设置一个循环,cnt++到n时,证明所有的人都报到了m,报数结束,先忽略 i++; 以及 if(i>n)i=1; 两行代码)
1.a[i]=0表示该人还未出局,a[i]=1,则表示该人已经出局
2.因为a[i]=0,证明该人进行报数,并且并不是出局的数字m,则用k++表示顺延到下一个人报数
3.当k=m,证明这个人念到了出局的数字,则将a[i]=0修改为a[i]=1,证明该人出局,cnt++证明出局的人数增加一个,此时我们可以将出局的人的编号i打印出来,同时,我们将k变为0,证明我们从下一个人重新开始报数循环
4.然后我们看到开头那两行代码,i++;和 if(i>n)i=1;就并不难理解这个做法:
因为我们报数的人的编号一直在增加,为了防止报数的人的编号i大于n,我们就要设置这么一个语句
下面是整个程序的代码
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
int a[100] = { 0 };
int m, n;
scanf("%d%d", &n, &m);
int cnt = 0,k=0,i=0;//cnt为目前出局人数,总共有n人,报数到m出局
while (cnt != n)
{
i++;
if (i > n)i = 1;
if (a[i] == 0)
{
k++;
if(k==m)
{
a[i] = 1;
cnt++;
printf("\t%d", i);
k = 0;//清空k,重新从1开始报数
}
}
}
return 0;
}
//希望这篇文章可以帮助到大家