关于Josephus问题
不知道程序哪有问题帮忙改一下#include"stdafx.h"#include<iostream>usingnamespacestd;intmain(){intn,s,...
不知道程序哪有问题 帮忙改一下
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{ int n,s,m;
cout<<"n=";
cin>>n;
cout<<"s=";
cin>>s;
cout<<"m=";
cin>>m;
if(n<=0||s<=0||m<=0){
cout<<"error"<<endl; }//判断n,s,m取值是否正常,如否,输出error
int i,j,k,temp;//k为次数
int turn[100];
for(i=0;i<n;i++){
turn[i]=i+1;}//建立数组
i=s-1;//设定开始报数的起始位置
for(k=n;k>1;i--){
if(i==k){i=0;}//最后一个元素的下一个就是第一个元素
i=((i+m-1)%k);//计算要报数的小孩序号
if(i!=k-1){temp=turn[i];
for(j=i;j<k-1;j++)
turn[j]=turn[j+1];//将i位置一直到k-1位置元素向前移一位
turn[k-1]=temp;//将报数的小孩移动至数组最后
}
}
for(k=n;k>=0;k--){
cout<<turn[k]<<" ";//反向输出输出数组元素即为所求数列
}
return 0;
} 展开
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{ int n,s,m;
cout<<"n=";
cin>>n;
cout<<"s=";
cin>>s;
cout<<"m=";
cin>>m;
if(n<=0||s<=0||m<=0){
cout<<"error"<<endl; }//判断n,s,m取值是否正常,如否,输出error
int i,j,k,temp;//k为次数
int turn[100];
for(i=0;i<n;i++){
turn[i]=i+1;}//建立数组
i=s-1;//设定开始报数的起始位置
for(k=n;k>1;i--){
if(i==k){i=0;}//最后一个元素的下一个就是第一个元素
i=((i+m-1)%k);//计算要报数的小孩序号
if(i!=k-1){temp=turn[i];
for(j=i;j<k-1;j++)
turn[j]=turn[j+1];//将i位置一直到k-1位置元素向前移一位
turn[k-1]=temp;//将报数的小孩移动至数组最后
}
}
for(k=n;k>=0;k--){
cout<<turn[k]<<" ";//反向输出输出数组元素即为所求数列
}
return 0;
} 展开
展开全部
#include <iostream>
using namespace std;
int main()
{ int n,s,m;
cout<<"n=";
cin>>n;
cout<<"s=";
cin>>s;
cout<<"m=";
cin>>m;
if(n<=0||s<=0||m<=0){
cout<<"error"<<endl; }//判断n,s,m取值是否正常,如否,输出error
int i,j,k,temp;//k为次数
int turn[100];
for(i=0;i<n;i++){
turn[i]=i+1;}//建立数组
i=s-1;//设定开始报数的起始位置
for(k=n;k>1;k--){ //i-- >>>k--
//if(i==k){i=0;}这里可以不要。i=k or i=0到下句%k意义一样//最后一个元素的下一个就是第一个元素
i=((i+m-1)%k);//计算要报数的小孩序号
if(i!=k-1){temp=turn[i];
for(j=i;j<k-1;j++)
turn[j]=turn[j+1];//将i位置一直到k-1位置元素向前移一位
turn[k-1]=temp;//将报数的小孩移动至数组最后
}
}
for(k=n-1;k>=0;k--){ //k==n>>>k=n-1
cout<<turn[k]<<" ";//反向输出输出数组元素即为所求数列
}
return 0;
}
using namespace std;
int main()
{ int n,s,m;
cout<<"n=";
cin>>n;
cout<<"s=";
cin>>s;
cout<<"m=";
cin>>m;
if(n<=0||s<=0||m<=0){
cout<<"error"<<endl; }//判断n,s,m取值是否正常,如否,输出error
int i,j,k,temp;//k为次数
int turn[100];
for(i=0;i<n;i++){
turn[i]=i+1;}//建立数组
i=s-1;//设定开始报数的起始位置
for(k=n;k>1;k--){ //i-- >>>k--
//if(i==k){i=0;}这里可以不要。i=k or i=0到下句%k意义一样//最后一个元素的下一个就是第一个元素
i=((i+m-1)%k);//计算要报数的小孩序号
if(i!=k-1){temp=turn[i];
for(j=i;j<k-1;j++)
turn[j]=turn[j+1];//将i位置一直到k-1位置元素向前移一位
turn[k-1]=temp;//将报数的小孩移动至数组最后
}
}
for(k=n-1;k>=0;k--){ //k==n>>>k=n-1
cout<<turn[k]<<" ";//反向输出输出数组元素即为所求数列
}
return 0;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询