我自己写的程序,不知道问题在哪,运行验证时,对应某些n,m值,得到的是对的,有些又是错的,急求指导,我的编程软件调试的时候总是出问题,急求指导,我想把程序写简单点
#include<stdio.h>
void main()
{
int num[50],n,m,i;
int x=0,y=0;
printf("总数,报数\n");
scanf("%d,%d",&n,&m);
for(i=0;i<=n;i++)
{
if(i==n)//编号为n+1个人报数时,因为只有n个人,所以重新由第一个人报数
{i=0;}//i=0,相当于第一个人开始报数
num[i]=i+1;//编号1,2,3,……,n
if((n-y)==1) //如果只剩1个人未报数,即为最后一个出列的人
{
printf("%d",i+1);//输出最后一个出列人的编号
break;//跳出循环
}
if(num[i]!=0)//编号不为0的报数
{ x++;}//x控制报的数
if(x==m)//报数为m时
{
x=0;//报数归零,实现循环报数
num[i]=0;//编号变为0,这样处理相当出列,编号为0的不参与报数
y++;//出列人数+1
}
}
}
能看看我的程序吗?
/*
总数 报数
8 4
4 8 5 2 1 3 7 6
Press any key to continue
*/
#include<stdio.h>能看看我的程序吗?
追答我仔细看了你的代码,算法上不合理,所以改动很大。这是用数组做的,我还有链表做的约瑟夫报数代码,看上去要复杂多了。
本回答被提问者采纳C语言编程,编号1,2,3……,n的人循环报数,报数为m的出列,下一位接着又...
public static void main(String[] args) { int[]num=new int[50];int n=7,m=3;int x=0,y=0;int i;\/\/***先赋值 for(int j=0;j<n;j++){ num[j]=j+1;} \/\/ for( i=0;i<=n;i++){ if(i==n)\/\/编号为n+1个人报数时,因为只有n个人,所以重新由第一个人报数 { i=...
用C语言解决一个实际问题(不要太长)
已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。void JOSEPHUS(int n,int k,int m) \/\/n为总人数,k为第一个开始报数的人,m为...
C语言:n个编号为1~n的人围坐一圈,从1号开始正向报数到m者退出,从下一...
int main(int argc,char *argv[]){ int a[20],b[20],i,j,t,n,m;printf("Enter n(int 0<n,m<21)...\\nn m = ");if(scanf("%d%d",&n,&m)==2 && n>0 && n<21 && m>0 && m<21){ for(i=0;i<n;a[i++]=i+1);\/\/创建人员编号 i=-1,j=t=0;printf("\\nTh...
...喊到一个数就出局,最后剩下的人,用c语言用动态链表编程
假设有n个人参加报数,依次编号1~n。从编号1开始依次报数,从1报到m,报到m的人出列,剩下来的人重新开始报数,报到m的人出列,如此重复直到所有人都出列为止。最后出列的人原来的编号是多少?链表程序如下:include <stdio.h>#include<stdlib.h>struct node{int num;struct node *next;};struct ...
...从第一个人开始报数(从1到3报 数),凡报到3的人退出圈子,
if(*p==0){\/\/如果健在 if(out_n==(N-1))break;\/\/如果仅剩一人 call_n++;\/\/报数 call_n%=3;\/\/最大为3,到了3就从0开始 if(call_n==0){*p=1;out_n++;}\/\/为0(即3)出局 } p++;if(p==a+N)p=a;\/\/循环转向下一人 } printf("最后剩余者的编号是:%d\\n",p+1-a);} ...
c语言编写n个人围成一圈,按1、2、3报数,报到3的人退出,求最后留在圈...
设有n个人(编号0~(n-1)),从0开始报数,报到(m-1)的退出,剩下的人继续从0开始报数 (用数学方法解的时候需要注意应当从0开始编号,因为取余会取到0解。)实质是一个递推,n个人中最终留下来的序号与n-1个人中留下来的人的序号有一个递推关系式。假设除去第k个人,则 0, 1, 2, ...
...从第一个人开始报数(从1到3报数),凡报到3的人退出 。。。
这个问题叫约瑟夫环问题。n个人围成一圈,按顺序编号,分别为1、2、3..n。(你可以理解成每个人的座号)。然后1号开始,每人依次报号。即 (这里假设n=5)(前面是座号、后面是他报的号)1:1 2:2 3:3(退出)现在只剩下座号为1、2、4、5的人,从3的下一个开始报号 4:1 5:2 1:3...
约瑟夫问题的两种解法
【约瑟夫问题】编号为1,2,...,n的n个人按照顺时针方向围坐一圈。从第一个人开始顺时针方向自1开始报数,报到m时停止报数。报m 的人出列,从他在顺时针方向的下一个人开始重新报数,如此下去,直到所有人全部出列为止。设计一个程序来求出出列顺序。其中n,m由键盘输入。【思路1】利用数组存放n...
C语言出错重新位
int main(){ int ln,x,t,s,k,i,n,m,p;static int a[200];printf("编号1,2,...,n的n个人逆时针依次围成一圈,从1开始,\\n");printf("逆时针1,2,3,..报数,凡m的倍数者出圈.\\n");printf("求最后一个未出列者与第p个出列者的编号.\\n");printf("请依次输入n,m,p:");sca...
学C语言的NOIP问题
SQL Server C. Oracle D. 金山影霸 E. Foxpro 12. 下列哪个程序设计语言不支持面向对象程序设计方法( )。 A. C++ B. Object Pascal C. C D. Smalltalk E. Java 13. 由3个a,1个b和2个c构成的所有字符串中,包含子串“abc”的共有( )个。 A. 20 B. 8 C. 16 D. 12 E. 24 14. 某个车站...