永发信息网

C语言编程 约瑟夫环问题

答案:2  悬赏:20  手机版
解决时间 2021-06-05 19:42
C语言编程 约瑟夫环问题
最佳答案
#include<stdio.h>
#include<stdlib.h>
void main()
{
int a[100];
int n,r,ctor,u;
int call(int a[],int real,int u);

for(n=0;n<=99;n++)a[n]=0;

printf("/约瑟夫环 JOSEPHUS/\n\n");
printf("输入参与报数的人数\n");
scanf("%d",&r);
printf("输入报数上限\n");
scanf("%d",&u);
ctor=1;

for(n=0;n<r;n++)
{
*(a+n)=ctor;
ctor++;
if(ctor>u)ctor=1;
}
call(a,r,u);system("pause");
}

int call(int a[],int real,int u)
{
int n1,i;
int *p;
p=(a+u-1);
n1=0;i=u;

for(;n1<real-1;p++)
{
if(p>(a+real-1))p=a;
if(*(p)!=0)
{
if(i>u)i=1;
if(i==u)
{
*(p)=0;n1++;
}
i++;
}
}

for(i=0;i<real;i++)
if(*(a+i)!=0)printf("所剩最后一位原来的呼号是%d\n\n",i+1);
}
《天下代码一大抄……》
全部回答

#include<iostream> using namespace std; //本程序以从1开始数,数到3离队为例,其它情况只用少加修改 void make(int *base,int n,int pos,int c) { int j=0; cout<<"NO. "<<++c<<" 第"<<pos+1<<"位出列"<<endl;//输出 base[pos]=0;//踢掉 if(c==n)return; //出口 while(j-3) if(base[pos=(pos+1)%n]) j++;//递归点 ,每次数到几这个3就改到几 make(base,n,pos,c);//递归 } int main() { int n,c=0,pos=2;//从N开始数,则把pos改为N-1就行了. cout<<"请输入总人数"<<endl; cin>>n; int *base=new int[n]; for(int i=0;i<n;i++) base[i]=1; make(base,n,pos,c); delete[]base; system("PAUSE"); return 0; }

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
一个以兄妹相称的朋友突然点歌向你求婚怎么办
电脑老是无故网线被拔出,怎么回事???
萨尔图区大庆纽罗宾烘焙坊地址在哪,我要去那
3:西汉马王堆“T”形帛画有何艺术特色?
一道数学奥数题 今天完
双黄蛋是怎么回事
怎样才能健康快速的减去粗壮的大腿及腹部的赘
保定哪有卖兴安岭奶粉?
你的爱藏在哪 分给我好不好 是什么歌
那是叫什么名字的游戏?
开粉钻,是不是只有企鹅有特权?猪也会有特权
请问侠盗猎车之罪恶都市怎样当老大?
啊元交不到女朋友怎么办??
许克昌是白痴吗?
赛尔号勇者之塔30层怎么打
推荐资讯
怎么样设置免费QQ空间
哪里有马条的《那年榕树下》MP3下载
外出旅游拍照买什么样的相机比较好啊??
华容县岳阳重庆小面(桥西路)怎么去啊,谁知道
心里压力好大·我要窒息了·
谁有好听的DJ歌曲或英文歌曲
湘潭县湘潭天天添美食店在什么地方啊,我要过
西安电子科技学校怎么样?
赛尔号这套装扮怎么得?
谁能告诉我IRIS里的崔胜熙到底是做什么的?看
我还会长几厘米
该怎么交朋友?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?