解题思路:
用数组给每个人标号,将每次循环报3的人赋值0,直到只剩1个找到它的标号。
参考代码:
#include <stdio.h>
// 函数pan用于找出最后剩下的一个元素
int pan(int *a, int n)
{
int i, count = 0, remain = n; // count用于计数,remain用于记录剩余的元素数量
while (remain > 1) // 当剩余元素数量大于1时,继续循环
{
for (i = 0; i < n; i++) // 遍历数组
{
if (a[i] != 0) // 如果当前元素不为0,说明它还没有被移除
{
count++; // 计数器加1
if (count == 3) // 当计数器达到3时,移除当前元素(将其设为0)
{
a[i] = 0;
count = 0; // 重置计数器
remain--; // 剩余元素数量减1
}
}
}
}
// 当剩余元素数量为1时,找出这个元素并返回其在原数组中的位置(从1开始计数)
for (i = 0; i < n; i++)
{
if (a[i] != 0)
{
return i + 1;
}
}
return 0; // 如果没有找到剩余的元素,返回0
}
int main()
{
int n, after;
scanf("%d", &n); // 从输入读取元素数量
int a[100]; // 初始化一个大小为100的数组
for (int i = 0; i < n; i++) // 将数组的前n个元素设为1到n
a[i] = i + 1;
after = pan(a, n); // 调用pan函数,找出最后剩下的元素
printf("%d\n", after); // 输出结果
return 0;
}
0.0分
0 人评分
点我有惊喜!你懂得!浏览:1274 |
C语言训练-阿姆斯特朗数 (C语言代码)浏览:897 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:583 |
震宇大神的杀毒软件 (C++代码)浏览:1173 |
C语言训练-排序问题<2> (C++代码)浏览:936 |
C语言训练-计算1~N之间所有奇数之和 (C语言代码)浏览:689 |
printf基础练习2 (C语言代码)浏览:955 |
C语言程序设计教程(第三版)课后习题1.6 (C语言代码)浏览:732 |
C语言程序设计教程(第三版)课后习题8.3 (C语言代码)浏览:624 |
2005年春浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:672 |