C语言:有n个人围成一圈,按顺序从1到n编号。从第一个人开始报数,报数3的人退出圈子

【问题描述】有n个人围成一圈,按顺序从1到n编号。从第一个人开始报数,报数3的人退出圈子,下一个人从1开始重新报数,报数3的人退出圈子。如此循环,直到留下最后一个人。问留... 【问题描述】 有n个人围成一圈,按顺序从1到n编号。从第一个人开始报数,报数3的人退出圈子,下一个人从1开始重新报数,报数3的人退出圈子。如此循环,直到留下最后一个人。问留下来的人的编号。 【输入形式】 考虑如下两种情况: 如果n超出“n must be a natural number less than 10000”,则打印“n is out of range of valid values.”;其中n应该用如上输入的具体的n数值代替;换行; 如果n是有效范围的数值,则打印“Last No. is:”;然后直接在冒号后面输出最后留下来的人的编号;换行; 【运行时的输入输出样例1】(下划线部分表示输入) Input n(n must be a natural number less than 10000):5 Last No. is:4 【运行时的输入输出样例2】(下划线部分表示输入) Input n(n must be a natural number less than 10000):100000 100000 is out of range of valid values.

注:1.请不要复制黏贴网上的源程序给我,我能搜的都试过了,大多数连编译都不对,编译对的也是死循环
2.请不要用C语言以外的语言,包括C++
3.请不要喊我伸手党……我自己编了两个钟头又在网上找其他的源程序试了三个钟头,走投无路了亲~!!
展开
 我来答
百度网友1347a34
2016-04-24 · TA获得超过2558个赞
知道小有建树答主
回答量:497
采纳率:66%
帮助的人:366万
展开全部
#include <stdio.h>
const int M = 3;
int main()
{
    int n, s = 0;
    scanf("%d", &n);
     if(n>10000)
    {
    printf("n must be a natural number less than 10000 \n";
    printf("%d is out of range of valid values.",n);
    printf("Please Enter again :\n");
    scanf("%d", &n);
    }
    for (int i=2;i<=n;++i)
        s=(s+M)%i;
    printf("Last No. is %d\n",s+1);
    return 0;
}
百度网友995f2ea
2012-05-15 · TA获得超过113个赞
知道小有建树答主
回答量:160
采纳率:0%
帮助的人:251万
展开全部
欢迎追问

#include<stdio.h>
#include<stdlib.h>
int main()
{
int i=0,j=0;
int a[10000]={0};
int n;
printf("Input n(n must be a natural number less than 10000):");
scanf("%d",&n);
if(n>10000)
{
printf("%d is out of range of valid values.\n",n);
exit(1);
}
for(j=0;j<n;j++)
a[j]=1;
int k=0;
int sum=0;
do
{
k=k+a[i%n];
if(k==3)
{
a[i%n]=0;
k=0;
sum=0;
}
i++;
for(j=0;j<n;j++)
sum=sum+a[j];
}while(sum!=0);
printf("Last No. is:%d\n",(i-1)%n+1);
return 0;
}
追问
大部分对了 提交作业的网站上有两项报错
错误输出:
Input n(n must be a natural number less than 10000):Last No. is:1
--------------------------------------------------------------------------------
期望输出:
Input n(n must be a natural number less than 10000):-1 is out of range of valid values.



运行时错误(SIGFPE)
错误原因可能是:
零作为除数
追答
#include
#include
int main()
{
int i=0,j=0;
int a[10000]={0};
int n;
printf("Input n(n must be a natural number less than 10000):");
scanf("%d",&n);
if(n>10000||n10000||n<=0)
--------------------------------------------------------------------------------
还有问题请看你空间留言,加我好友细说
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式