关于数组解决约瑟夫圈的问题

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分了,抱歉
展开
 我来答
mxl033
2013-09-24 · TA获得超过216个赞
知道小有建树答主
回答量:120
采纳率:61%
帮助的人:84万
展开全部

你的第一行注释:

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 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件... 点击进入详情页
本回答由光点科技提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式