| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 570 人关注过本帖
标题:类似约瑟夫的问题。请纠正一下程序
只看楼主 加入收藏
ningye
Rank: 2
等 级:论坛游民
帖 子:33
专家分:22
注 册:2011-9-22
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:7 
类似约瑟夫的问题。请纠正一下程序
N(N>M)个人(每个人有一个编号,按顺序取1到N之前的一个自然数)围成一圈,从第一个开始顺序报名1、2、3、、、M;然后留在圈子里的从下一个人开始继续顺序报名1、2、3、、、M;报到M者退出圈子,如此继续直到圈子里的人小于M个并输出他们的编号。

# define  N 17
# include <stdio.h>
main()
{int t1,t2,i,j,n=N,m,a[N],b[N];
printf("imput the number:\n");
scanf("%d",&m);
 for(i=1;i<=n;i++)
  a[i]=i;
 do{t1=n/m;t2=n%m;j=t2;
  for(i=1;i<=n;i++)
   if(i/m)b[++j]=a[i];//为重排数组做准备//
     for(i=1;i<=t2;i++)
   b[i]=b[j-t2+i];//将余数排在前面重新排列数组//
       n=n-t1;//排列后的n值//
  for(i=1;i<=n;i++)
   a[i]=b[i];//为第一个循环做准备//
 }while(n>=m);
 for(i=1;i<=n;i++)
 printf("the number of the last  is:%5d",a[i]);
 printf("\n");
 return 0;
}
我输入m等于5,程序运行结不对啊
搜索更多相关主题的帖子: 报名 include 约瑟夫 number 报名 include 约瑟夫 number 
2011-09-22 16:48
ningye
Rank: 2
等 级:论坛游民
帖 子:33
专家分:22
注 册:2011-9-22
收藏
得分:0 
if(i/m)b[++j]=a[i];//为重排数组做准备//应该是(i%10但还是不对)
2011-09-22 16:56
唯我独魔
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:176
专家分:782
注 册:2011-4-13
收藏
得分:10 
# define  N 17
# include <stdio.h>
main()
{int t1,t2,i,j,n=N,m,a[N+1],b[N+1];/*这里改了*/
printf("imput the number:\n");
scanf("%d",&m);
for(i=1;i<=n;i++)
  a[i]=i;
do{t1=n/m;t2=n%m;j=t2;
  for(i=1;i<=n;i++)
   if(i%m)b[++j]=a[i];//为重排数组做准备  这里也改了
     for(i=1;i<=t2;i++)
   b[i]=b[j-t2+i];//将余数排在前面重新排列数组//
       n=n-t1;//排列后的n值//
  for(i=1;i<=n;i++)
   a[i]=b[i];//为第一个循环做准备//
}while(n>=m);
for(i=1;i<=n;i++)
printf("the number of the last  is:%5d",a[i]);
printf("\n");
return 0;
}
2011-09-22 17:17
ningye
Rank: 2
等 级:论坛游民
帖 子:33
专家分:22
注 册:2011-9-22
收藏
得分:0 
回复 3楼 唯我独魔
还是不对a[N]有问题吗
2011-09-22 17:53
唯我独魔
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:176
专家分:782
注 册:2011-4-13
收藏
得分:0 
以下是引用ningye在2011-9-22 17:53:15的发言:

还是不对a[N]有问题吗
我自己运行是正确的啊,改了两个地方啊
2011-09-22 17:54
ningye
Rank: 2
等 级:论坛游民
帖 子:33
专家分:22
注 册:2011-9-22
收藏
得分:0 
回复 5楼 唯我独魔
汗2楼是我自己改的。a[N]有什么问题。那你运行的结果是什么什么编译器
2011-09-22 20:07
唯我独魔
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:176
专家分:782
注 册:2011-4-13
收藏
得分:0 
回复 6楼 ningye
if(i%m)b[++j]=a[i]; 这里是i%m
还有N的话数组过界了,a[N]是a[0]到a[N-1],你用到a[N],所以要改为a[N+1]
2011-09-22 20:26
ningye
Rank: 2
等 级:论坛游民
帖 子:33
专家分:22
注 册:2011-9-22
收藏
得分:0 
回复 7楼 唯我独魔
我是a[1]到a[N]郁闷起始位置是1。你运行的是什么结果
2011-09-22 23:31
快速回复:类似约瑟夫的问题。请纠正一下程序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022182 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved