中易网

约瑟夫问题41个人围成一圈由第一个人开始数到第三个就死一直循环找出不死的人能编出来吗网上看不懂

答案:3  悬赏:10  
解决时间 2021-02-16 08:50
约瑟夫问题41个人围成一圈由第一个人开始数到第三个就死一直循环找出不死的人能编出来吗网上看不懂
最佳答案
void writeto(link_stu H)
{
FILE *a;
link_stu p;
p=H->next;
a=fopen("stu.dat","w+");
fwrite(H,sizeof(lnode_stu),1,a);

while(p!=NULL)
{
fwrite(p,sizeof(lnode_stu),1,a);
p=p->next;
全部回答
我觉得用指针做最方便,做成首位相连的链表,算法基本没难度。
不过还是用数组写吧,你可以照着这个写一个java的。
int i,j;
int total =41; //总人数
j=0;
int a[total];
for(i=0;i<41;i++){a[i]=1;}//数组a初始化,1表示活着。。。
i=0;
j=1;
for(;;) //循环开始
{
if(a[i]==1){ //只有这个人活着我们才会去判断是不是数到3了,如果死了,就应该跳过
if(j==3){//到这个人时j数到3了
a[i]=0;//置0,杀掉他
total--; //活着的人少了一个
j=1;//j重新开始计数
if(i==40){i=0;}else(i++;)//如果我们数到第41个位置了要回头
}else{
j++;//如果j没到3,我们也要往下数,但是j要加1
if(i==40){i=0;}else(i++;) //同上
}
}else{ //已经死了(0),那就往下一个,但是j是不动的,因为这个位置已经空了
if(i==40){i=0;}else(i++;)//同上
}
if(total==1) break; //剩一个人就停止
}
for(i=0;i<41;i++)
{
if(a[i]!=0)
printf("%d\n",i); //1就是还是活着的,i是他的编号
}
}

#include "stdio.h"
int f(int *p,int n)
{
int count=n,t=0,i,r;
while(count>1)
{
count=0;
for(i=1; i<=n; i++)
{
if(*(p+i)!=0)
{
t++;
if(t==3)
{
*(p+i)=0;
t=0;
}
else
{
count++;
}
}
}
}
for(i=1; i<=n; i++)
{if(*(p+i)!=0)
{r=*(p+i);}
}
return r;
}
void main()
{
int n=41,i,a[20],r;
for(i=1; i<=41; i++)
{
a[i]=i;
}
r=f(a,n);
printf("最后剩下的是原来第%d号的那位.",r);
}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
爆米花怎么会糊啊
7分之8和9分之8,20分之19,10分之11那个更接
5米高5米宽的引水遂道工程造价要多少钱一米总
下雨了 然后,后面女孩子哭的说唱是什么歌吗
刚死掉男人的女人可以串门吗
红米1s安卓手机关机后设的闹铃还响吗?
3.85+1.5x等于6.1
米酒里面为什么有米呢?
请问CFA考试的及格分数线是多少?
苍海桑田是什么意思?
当前我国海洋环境主要存在哪些问题
大家谁有比较好的减肥方法可以告诉下吗我女生
最近手指老掉皮,从指甲上就能撕下很厚一层皮
息县今世缘宾馆地址好找么,我有些事要过去
慈溪市龙山镇中心幼儿园地址在什么地方,想过
推荐资讯
excel公式“=C16*10000/C$4”代表什么意
怎么去掉中望cad教育版
“音乐是文化”,为什么说音乐是文化?两者之
“你的泪是伤心的雨啊”这是什么歌里的歌词
有没有稳定的正规的网上赚钱的方法??求推荐
真三国无双联合突袭2中文版无敌初始存档,手
女人上班和不上班区别
food I good want of to lot go a to eat the
现在40岁有还是1个孩子还能享受独生子女政策
朝柴4102发动机低转速时机油灯闪亮
Nvidia Geforce G100显卡应该升级什么显卡能
汕头肠粉炖品店地址在哪,我要去那里办事
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?