两种算法的区别

来源:百度知道 编辑:UC知道 时间:2024/06/17 12:54:13
如果是字母a,则改成字母z。大写字母仍为大写字母,小写字母仍为小写字母,其他字符不变。
算法1:
if(xx[i][j]>='a'&& xx[i][j]<='z')
{
if(xx[i][j]=='a')
xx[i][j]='z';
else
xx[i][j]-=1;
}
算法2:
if(xx[i][j]>'a'&&xx[i][j]<='z')
xx[i][j]--;
if(xx[i][j]=='a')
xx[i][j]='z';
我自己又试了试,算法2这样改就和算法1的结果一样了
if(xx[i][j]>'a'&&xx[i][j]<='z')
xx[i][j]--;
else //加一个else
if(xx[i][j]=='a')
xx[i][j]='z';

看到问题所在了,楼上两位都没讲到点子上

问题出在第二个算法的第一个if上

如果xx[i][j]是b的话,那么会进入第一个if,b会变成a
在第一个if后xx[i][j]变成了a,那么又会进入第二个if,a又会变成z
相对于xx[i][j]直接从b变成了z

之所以加了个else就没问题了是因为进了第一个if就不会再进第二个if!

C语言。我感觉算法二没啥道理,数组xx不管等不等于a,那个都得减去1。当然算法一就不同了,他是先有判断数组xx等不等于a,在考虑减不减不减1,如果符合就不减一了。 就是这样,如果还是不太清楚回我,信息

第一个是变完之后减一
第二个是减一之后再变