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.请不要喊我伸手党……我自己编了两个钟头又在网上找其他的源程序试了三个钟头,走投无路了亲~!! 展开
注:1.请不要复制黏贴网上的源程序给我,我能搜的都试过了,大多数连编译都不对,编译对的也是死循环
2.请不要用C语言以外的语言,包括C++
3.请不要喊我伸手党……我自己编了两个钟头又在网上找其他的源程序试了三个钟头,走投无路了亲~!! 展开
2个回答
展开全部
#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;
}
展开全部
欢迎追问
#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;
}
#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)
--------------------------------------------------------------------------------
还有问题请看你空间留言,加我好友细说
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询