c语言建立顺序表,有n个人围成一圈,按顺序从1到n编好号。从第一个人开始报数,报到m(m<n)的人退出圈子

自己编了个约瑟夫问题,求问题出在哪!问题:n个人围成一圈,从第一个人开始依次从1到m循环报数,当报到m的时候此人出圈,然后从下一个人开始重新报数,直到圈中只剩一人为止.打印出最后一个人的原始编号。实现要求:& 采用数组模拟游戏过程参加游戏人数最多50人:即数组上限为50。可以输入参加游戏人数,以及报数上限这是我的程序#include&stdio.h&main(){ int a[50]={0},x,n,i,y,l; printf(&Please input 2 numbers:&); scanf(&%d%d&,&x,&n); for(i=n-1,l=0,y=0;;y++)
{ if(a[y]==1)
if(l==x-1)
if(y=x-1) y=0;
} for(i=0;;i++) {
if(a[i]==0)
} } printf(&The number is %d\n&,l); return 0;}
& 比如输入5,答案应该是3,不过这个程序是1
  C/C++ code  #include&stdio.h&
int a[50]={0},x,n,i,y,l;
printf(&Please input 2 numbers:&);
scanf(&%d%d&,&x,&n);
for(i=n-1,l=0,y=0;;y++)
if(a[y]==1)
这个不需要
表达现在位置的应该是y而不是i
if (++l==x-1)
在这里判断是否只剩下一个人了
这个也不需要,不是每次循环都有一个人被拉出去
//if(l==x-1)
这里移到上面去了
if(y==x-1)
这里的比较算符少打了一个等号
这里你是想把y指到开始位置,但你忘了循环体结束后它会被增量。你得让他再小点才行。
for(i=0;;i++)
if(a[i]==0)
printf(&The number is %d\n&,l);提示:用环形链表实现
对于这个题目其实就是用c语言的循环链表实现一个约瑟夫环。我们可以定义一个循环链表,将这n个人加入到链表中,然后定义三个节点指针在链表上循环,移动跨度为3,利用链表的循环功能每次删除第三个节点,这边要注意的一个问题就是你定义的是3个指针,且在循环中他们彼此也都是有
-&next关系,一般我们判断循环结束条件时都是一个节点的下一个节点是否为它本身(如ptr-&next == ptr),这里我们要注意循环体中链接方向否则很可能出现无用指针导致错误,因为最后我们要剩下一个节点那么ptr-&next为NULL,而剩下的不能是NULL-&next.
具体程序,如下:
#include &stdio.h&#include &stdlib.h&
struct node{&&&&&&&&struct node *};
struct node *struct node *
void cre_list(){&&&&head = (struct node *)malloc(sizeof(struct node));&&&&last =&&&&head-&next =}
void display_node(){&&&&struct node *ptr = head-&&&&&while(ptr != head)&&&&{&&&&&&&&printf("%d\t",ptr-&num);&&&&&&&&ptr = ptr-&&&&&}&&&&printf("\n");}
void add_node(int num){&&&&struct node *ptr = (struct node *)malloc(sizeof(struct node));&&&&ptr-&num =&&&&ptr-&next =&&&&last-&next =&&&&last =}
void rev_node(){&&&&struct node *ptr =&&&&last-&next = head-&&&&&head = head-&&&&&free(ptr);}
void tiren_node(){&&&&struct node *ptr =&&&&struct node *str = ptr-&&&&&struct node *qtr = str-&&&&&while(ptr-&next != ptr)&&&&{&&&&&&&&str = ptr-&&&&&&&&&qtr = str-&&&&&&&&&str-&next = qtr-&&&&&&&&&ptr = str-&&&&&}&&&&printf("%d\n",ptr-&num);}
int main(){&&&&int i = 0;&&&&cre_list();&&&&&&&&printf("please input n:\n");&&&&scanf("%d",&n);&&&&printf("%d\n",n);&&&&for(i = 1;i &=i++)&&&&{&&&&&&&&add_node(i);&&&&}&&&&display_node();&&&&rev_node();&&&&tiren_node();&&&&return 0;}
阅读(...) 评论()扫二维码下载作业帮
1.75亿学生的选择
下载作业帮安装包
扫二维码下载作业帮
1.75亿学生的选择
N个人围成一个圈顺序编号,从第一个人开始报数(从1到M),凡报到M的人退出圈子,问最后一个圈中的人的编
扫二维码下载作业帮
1.75亿学生的选择
void Josegh(n){int i,j,k,s1,w;s1=s;for(i=1;i=2;i--){s1=(s1+m-1)%i; /*下一个开始报数的人的编号是(s1+m-1)%i*/if(s1==0) /*若s1为0,则说明要开始报数的是最后一个人*/s1=i;w=p[s1-1]; /*将要出圈的人移至数组的最后*/for(j=s1;j
为您推荐:
其他类似问题
扫描下载二维码只需一步,快速开始
后使用快捷导航没有帐号?
查看: 3909|回复: 12
有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出
累计签到:132 天连续签到:1 天&
马上注册加入鱼C,享用更多服务吧^_^
才可以下载或查看,没有帐号?
#include&stdio.h&
& & & & int temp[80],n,i,j,k=0,t;
& & & & printf(&输入n:&);
& & & & scanf(&%d&,&n);
& & & & if(n&=0) return 0;
& & & & for(i=1;i&=n;i++)
& & & & & & & & temp[i-1]=i;
& & & & j=n;
& & & & if(j==1)
& & & & & & & & {& & & &
& & & & & & & & & & & & printf(&1号\n&);
& & & & & & & & & & & & return 0;
& & & & & & & & }& & & &
& & & & while(j&=2)
& & & & & & & & {
& & & & & & & & & & & & for(i=0;i&n;i++)
& & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & if(temp[i]!=0)
& & & & & & & & & & & & & & & & & & & & & & & & & & & & k++;
& & & & & & & & & & & & & & & & & & & & if(temp[i]!=0&&k==1&&j==1)
& & & & & & & & & & & & & & & & & & & & & & & & {t=temp[i];}
& & & & & & & & & & & & & & & & & & & & if(k==3)
& & & & & & & & & & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & & & & & & & & & temp[i]=0;
& & & & & & & & & & & & & & & & & & & & & & & & & & & & j--;
& & & & & & & & & & & & & & & & & & & & & & & & & & & & k=0;
& & & & & & & & & & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & & & & & & if(i==n-1) i=0;
& & & & & & & & & & & & & & & & }
& & & & & & & & }
& & & & printf(&%d号\n&,t);
1. 如果您的提问得到满意的答案,请务必选择【最佳答案】;2. 如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】作为奖励;3. 善用【论坛搜索】功能,那里可能有您想要的答案;4. 粘贴代码请点击编辑框上的
按钮,否则您的代码可能会被“吃掉”!
累计签到:132 天连续签到:1 天&
求解哪里错了???:loveliness:
1. 如果您的提问得到满意的答案,请务必选择【最佳答案】;2. 如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】作为奖励;3. 善用【论坛搜索】功能,那里可能有您想要的答案;4. 粘贴代码请点击编辑框上的
按钮,否则您的代码可能会被“吃掉”!
累计签到:89 天连续签到:0 天&
终于做出来了代码贴上#include&stdio.h&
#include&windows.h&
void main()
{
& & & & int temp[80],n,i,j,k=0,t;
again:printf(&请输入总人数n:&);
& & & & scanf(&%d&,&n);
& & & & if(n&=0)
& && &
& & & & for(i=1;i&=n;i++)
& & & && & temp[i-1]=i;
& & & & j=n;& && &
& & & & while(j&=1)
& & & & {
& & & & & & & & for(i=0;i&n;i++)
& & & & & & & & {
& & & & & & & & & & & & if(temp[i]!=0)
& & & & & & & & & & & && &&&k++;
& & & & & & & & & & & & if(k==3)
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & temp[i]=0;
& & & & & & & & & & & & & & & & j--;
& & & & & & & & & & & & & & & & k=0;
& & & & & & & & & & & & }
& & & & & & & & & & & & if(temp[i]!=0&&k==1&&j==1)t=temp[i];
& & & & & & & & }
& & & & }
& & & & printf(&%d号\n&,t);
& & & & system(&pause&);
}复制代码
1. 如果您的提问得到满意的答案,请务必选择【最佳答案】;2. 如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】作为奖励;3. 善用【论坛搜索】功能,那里可能有您想要的答案;4. 粘贴代码请点击编辑框上的
按钮,否则您的代码可能会被“吃掉”!
累计签到:2 天连续签到:0 天&
uihiuhkhiuhkhiuhgfytuuuuyutu
1. 如果您的提问得到满意的答案,请务必选择【最佳答案】;2. 如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】作为奖励;3. 善用【论坛搜索】功能,那里可能有您想要的答案;4. 粘贴代码请点击编辑框上的
按钮,否则您的代码可能会被“吃掉”!
累计签到:284 天连续签到:1 天&
这个程序运行不了在于后面结尾处少了一个},程序设计是错误的,得不出结果。
1. 如果您的提问得到满意的答案,请务必选择【最佳答案】;2. 如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】作为奖励;3. 善用【论坛搜索】功能,那里可能有您想要的答案;4. 粘贴代码请点击编辑框上的
按钮,否则您的代码可能会被“吃掉”!
累计签到:132 天连续签到:1 天&
轻拿轻放 发表于
终于做出来了代码贴上
谢谢{:1_1:}
1. 如果您的提问得到满意的答案,请务必选择【最佳答案】;2. 如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】作为奖励;3. 善用【论坛搜索】功能,那里可能有您想要的答案;4. 粘贴代码请点击编辑框上的
按钮,否则您的代码可能会被“吃掉”!
累计签到:132 天连续签到:1 天&
风涯 发表于
这个程序运行不了在于后面结尾处少了一个},程序设计是错误的,得不出结果。
能不能说下哪里错了!!谢谢
1. 如果您的提问得到满意的答案,请务必选择【最佳答案】;2. 如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】作为奖励;3. 善用【论坛搜索】功能,那里可能有您想要的答案;4. 粘贴代码请点击编辑框上的
按钮,否则您的代码可能会被“吃掉”!
累计签到:96 天连续签到:0 天&
MARK:shock:
1. 如果您的提问得到满意的答案,请务必选择【最佳答案】;2. 如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】作为奖励;3. 善用【论坛搜索】功能,那里可能有您想要的答案;4. 粘贴代码请点击编辑框上的
按钮,否则您的代码可能会被“吃掉”!
累计签到:89 天连续签到:0 天&
<font color="#月30日 发表于
能不能说下哪里错了!!谢谢
完成图2.jpg (15.33 KB, 下载次数: 0)
15:30 上传
完成图.jpg (26.01 KB, 下载次数: 0)
15:30 上传
1. 如果您的提问得到满意的答案,请务必选择【最佳答案】;2. 如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】作为奖励;3. 善用【论坛搜索】功能,那里可能有您想要的答案;4. 粘贴代码请点击编辑框上的
按钮,否则您的代码可能会被“吃掉”!
累计签到:89 天连续签到:0 天&
如果是少了一个}你加上去试试就可以,你设计的逻辑没有错,可能就是
& && && && && & {& && &&&
& && && && && && && && &printf(&1号\n&);
& && && && && && && && &return 0;
& && && && && & }& && &&&
& && &&&while(j&=2)
错误而已 ,我拿下来就是这里的printf(&1号\n&);和后面的&&printf(&%d号\n&,t);冲突;我是把这一部分删除了并且把判断条件改成while(j&=1)就是这样了。
1. 如果您的提问得到满意的答案,请务必选择【最佳答案】;2. 如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】作为奖励;3. 善用【论坛搜索】功能,那里可能有您想要的答案;4. 粘贴代码请点击编辑框上的
按钮,否则您的代码可能会被“吃掉”!
累计签到:89 天连续签到:0 天&
还有这部分
again:printf(&请输入总人数n:&);
& && &&&scanf(&%d&,&n);
& && &&&if(n&=0)
是判断输入的是否正确,如果不正确就goto跳转到标志again出执行
1. 如果您的提问得到满意的答案,请务必选择【最佳答案】;2. 如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】作为奖励;3. 善用【论坛搜索】功能,那里可能有您想要的答案;4. 粘贴代码请点击编辑框上的
按钮,否则您的代码可能会被“吃掉”!
累计签到:2 天连续签到:0 天&
From FishC Mobile
这样写试试
#include&stdio.h&
& && &&&int temp[80],n,i,j,k=0,t;
& && &&&printf(&输入n = &);
& && &&&scanf(&%d&,&n);
& && &&&if(n&=0)
& && &&&return 0;
& && &&&j =
& && &&&if(j==1)
& && &&&& & & & printf(&%d号\n&,j);
& && &&&& & & & return 0;
& && && &for(i=1;i&=n;i++)
& && && && && & temp[i-1]=i;
& && &&&while(j&=1)
& && && && && & {
& && && && && && &&&for(i=0;i&n;i++)
& && && && && && && &{
& && && && && && && &&&if(temp[i]!=0)
& && && && && && && && & k++;& && && && && && && && && && && && && && && && && && && && && && && && & if(temp[i]!=0&&k==1&&j==1)
& && && && && && && && &&&{
& && && && && && && && &&&& & & & t=temp[i];
& && && && && && && && &&&& & & &
& && && && && && && && &&&}
& && && && && && && &&&if(k==3)
& && && && && && && && &&&{
& && && && && && && && && & temp[i]=0;
& && && && && && && && && &&&j--;
& && && && && && && && && &&&k=0;
& && && && && && && && && &}
& && && && && && && && &if(i==n)
& && && && && && && && & i=0;
& && && && && && && &&&}
& && && && && & }
& && &&&printf(&%d号\n&,t);
1. 如果您的提问得到满意的答案,请务必选择【最佳答案】;2. 如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】作为奖励;3. 善用【论坛搜索】功能,那里可能有您想要的答案;4. 粘贴代码请点击编辑框上的
按钮,否则您的代码可能会被“吃掉”!
累计签到:132 天连续签到:1 天&
<font color="#621587 发表于
这样写试试
谢谢帮忙:handshake
1. 如果您的提问得到满意的答案,请务必选择【最佳答案】;2. 如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】作为奖励;3. 善用【论坛搜索】功能,那里可能有您想要的答案;4. 粘贴代码请点击编辑框上的
按钮,否则您的代码可能会被“吃掉”!
&#8226;&#8226;&#8226;(
Powered by

我要回帖

更多关于 c语言顺序结构程序 的文章

 

随机推荐