关于数组解决约瑟夫圈的问题
voidJosephus(intn,intm,ints){inti,j,k,tmp;intA[10];if(!m){cout<<"FuckYou!"<<endl;}for...
void Josephus(int n,int m,int s){
int i,j,k,tmp;
int A[10];
if(!m){cout<<"Fuck You!"<<endl; }
for(i=0;i<n;i++) {A[i]=i+1;}
i=(s-1+n)%n;
for(k=n;k>1;k--){
// if(i==k) i=0; --------------疑问1
i=(i+m-1)%k;
// if(i!=k-1){ --------------疑问2
tmp=A[i];
for(j=i;j<k-1;j++) A[j]=A[j+1];
A[k-1]=tmp;
cout<<A[k-1]<<endl;
// }
}
for(k=0;k<n/2;k++)
{
tmp=A[k];
A[k]=A[n-k-1];
A[n-k-1]=tmp;
}
};
被我注释掉的两行就是我的疑问,在实际操作中,我有没有加入这两行貌似都没区别,
试过Josephus(9,5,2),Josephus(9,5,11),Josephus(9,5,-8),
请问这两个注释掉的语句是有什么作用呢?
实在只有5分了,抱歉 展开
int i,j,k,tmp;
int A[10];
if(!m){cout<<"Fuck You!"<<endl; }
for(i=0;i<n;i++) {A[i]=i+1;}
i=(s-1+n)%n;
for(k=n;k>1;k--){
// if(i==k) i=0; --------------疑问1
i=(i+m-1)%k;
// if(i!=k-1){ --------------疑问2
tmp=A[i];
for(j=i;j<k-1;j++) A[j]=A[j+1];
A[k-1]=tmp;
cout<<A[k-1]<<endl;
// }
}
for(k=0;k<n/2;k++)
{
tmp=A[k];
A[k]=A[n-k-1];
A[n-k-1]=tmp;
}
};
被我注释掉的两行就是我的疑问,在实际操作中,我有没有加入这两行貌似都没区别,
试过Josephus(9,5,2),Josephus(9,5,11),Josephus(9,5,-8),
请问这两个注释掉的语句是有什么作用呢?
实在只有5分了,抱歉 展开
1个回答
展开全部
你的第一行注释:
if(i==k) i=0;
就是当i等于k时,对i置0,而紧接其后的是
i=(i+m-1)%k;
另一个对i的赋值,且是对k取余数,所以无论i等于k还是i等于0,对于k的余数来说都是一样的,都可以整除,因此,这行代码,注释与否对于结果没有影响
第二行注释同理,其设定的条件是i不等于k-1,而即使i等于k-1,对于其中的逻辑来说,首先:
for(j=i;j<k-1;j++) A[j]=A[j+1];
不会执行,而其余的逻辑:
tmp=A[i];
A[k-1]=tmp;
cout<<A[k-1]<<endl;
除去最后的输出,前两句相当于自身赋值,所以其对最后的结果没有丝毫影响
光点科技
2023-08-15 广告
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件...
点击进入详情页
本回答由光点科技提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询