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;
}
运行结果:
方法二:使用指针
#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;
}
运行结果:
版权声明:本文为博主作者:TangFighting原创文章,版权归属原作者,如果侵权,请联系我们删除!
原文链接:https://blog.csdn.net/m0_58734370/article/details/129883208