一个难题,请帮忙解答

KingI 2003-10-17 08:59:32
有n个人按顺序排成一个圆圈,开始报数(从0到3),报到3的人离开,问最后剩下的一个人在原来的几号位?望各位帮忙解答,谢谢
...全文
32 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
danpianji2002 2003-10-19
  • 打赏
  • 举报
回复
呵呵什么老师留的作业
这么多人来贴阿
ttlb 2003-10-19
  • 打赏
  • 举报
回复
// 我用c语言改写好了。
#include <stdio.h>

void josephus(int iTotal, int iInter)
{
static int *iArr = new int[iTotal];
int j = 0; // j:间隔数iInter的游标
int iOut = 0;
for (int i = 0; ; ++i) // i:全部小孩iTotal的游标
{
i %= iTotal;

if (1 == iArr[i]) // 已经出去了
continue;
++j; // 此位置上的小孩还没有出去,j++;
if (iInter == j) // 已经输了iInter 个小孩,让这个小孩出去
{
iArr[i] = 1;
j = 0;
++iOut;
printf("%d\n",i);
}
if (iTotal == iOut) // 全出去了
return;
}
}

int main()
{
int iTotal = 0, iInter = 0;
printf("input total number: ");
scanf("%d",&iTotal);
printf("input internal: ");
scanf("%d",&iInter);
josephus(iTotal, iInter);
return 0;
}
playboyxp 2003-10-19
  • 打赏
  • 举报
回复
#include <iostream.h>
void main()
{
int a[17],i,j,k=1,integer;
for(i=0;i<17;i++)
a[i]=i+1;
cin>>integer;
i=-1;
while(1)
{
for(j=0;j<integer;)
{
i=(i+1)%17;
if(a[i]!=0) j++;
}
if(k==17) break;
cout<<a[i]<<" ";
a[i]=0;
k++;
}
cout<<a[i]<<endl;
}
darcymei 2003-10-17
  • 打赏
  • 举报
回复
连续n帖了,老师都布置一样的作业,活活...
LinuxPanther 2003-10-17
  • 打赏
  • 举报
回复
偶来晚了!
TianGuangZao 2003-10-17
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;
改成
#include <stdio.h>

cout 换成 printf 格式。
KingI 2003-10-17
  • 打赏
  • 举报
回复
十分感谢 ttlb这位朋友,可是你用的是C++代码,我有些地方看不大懂,能否用C编一下?谢谢
ttlb 2003-10-17
  • 打赏
  • 举报
回复


#include <iostream>
using namespace std;

void josephus(int iTotal, int iInter)
{
static int *iArr = new int[iTotal];
int j = 0; // j:间隔数iInter的游标
int iOut = 0;
for (int i = 0; ; ++i) // i:全部小孩iTotal的游标
{
i %= iTotal;

if (1 == iArr[i]) // 已经出去了
continue;
++j; // 此位置上的小孩还没有出去,j++;
if (iInter == j) // 已经输了iInter 个小孩,让这个小孩出去
{
iArr[i] = 1;
j = 0;
++iOut;
cout << i << endl;
}
if (iTotal == iOut) // 全出去了
return;
}
}

int main()
{
int iTotal = 0, iInter = 0;
cout << "input total number: ";
while (!(cin >> iTotal))
{
cout << "error, input again: ";
cin.clear();
char buf[1000];
cin.getline(buf, 1000);
}
cout << "input internal: ";
while (!(cin >> iInter))
{
cout << "error, input again: ";
cin.clear();
char buf[1000];
cin.getline(buf, 1000);
}
josephus(iTotal, iInter);
return 0;
}

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧