P291 5.有n个人围成一圈,顺序排号。从第1个人开始报数(从1到3报数)
凡报到3的人退出圈子,问最后留下的是原来第几号的那位
方法一:使用数组
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main() {
int a[50] = { 0 };
int n = 0;//人数
int count = 0;//报数(1-3)
int m = 0;//退出的人数
int last = 0;//最后留下的人的号码
int i = 0;
printf("请输入总人数:");
scanf("%d", &n);
for (i = 0; i < n; i++) {
a[i] = 1;//当a[i]=1时,(i+1)号还在圈里面
}
while (m < n) {
for (i = 0; i < n; i++) {
if (a[i] == 1) {
count++;//开始报数
if (count % 3 == 0) {
a[i] = 0;//i+1号退出
m++;//退出的数量
count = 0;
last = i + 1;
}
}
}
}
printf("最后留下的是原来第%d号\n", last);
return 0;
}
运行结果:
文章来源地址https://www.toymoban.com/news/detail-761912.html
方法二:使用指针
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main() {
int i, k, m, n, num[50], * p;
printf("请输入人数:");
scanf("%d", &n);
p = num;
for (i = 0; i < n; i++) {
*(p + i) = i + 1;
}
i = 0;
k = 0;
m = 0;
while (m < n - 1) {
if (*(p + i) != 0) {
k++;
}
if (k == 3) {
*(p + i) = 0;
k = 0;
m++;
}
i++;
if (i == n) i = 0;
}
while (*p == 0) p++;
printf("最后留下的人是第%d号\n", *p);
return 0;
}
运行结果:
文章来源:https://www.toymoban.com/news/detail-761912.html
到了这里,关于【C语言】P291 5.有n个人围成一圈,顺序排号。从第1个人开始报数(从1到3报数)凡报到3的人退出圈子,问最后留下的是原来第几号的那位的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!