int i = 0;
int e = 0;
cin >> i >> e;
cout << i;
while( ++i <= e ) {
cout << "." << i;
}
while ( --i >= e ){
cout << '.' << i;
}
大家好,我可以要求一些帮助关于这个。如果我运行我的代码,如果我输入例如:
INPUT: 1 5
MY CODE输出:1.2.3.4.5.5
输入:51
MY CODE输出:5.5.4.3.2.1
输出应为;
输入:15
输出应为:1.2.3.4.5
INPUT: 1
输出应为:5.4.3.2.1
这里有一个强烈的提示:
cin >> i >> e;
if (i <= e) {
// your code to print everything from i up to e goes here
}
else {
// your code to print everything from e down to i goes here
}
尝试运行两个带有前缀自增/自减操作符的while循环只是在寻找错误。
让我们讨论第一个输入:15。当你通过预加达到5时i,它输出i的值是5。然后再次返回while循环首先增加i的值(它达到6)然后检查6<=e的条件为false,则循环终止。
然后进入第二个循环。它首先减少值令i=5并检查是否i>=e这是真的,所以它打印I,在第一次迭代I的值小于e之后,它不打印任何东西。
在你的第一个while循环中,即使它没有被执行,++i <= e
也会被计算,i的值会增加。
假设输入是
1 5
第一个while循环后的输出将是
1.2.3.4.5
在这个位置,i的值是6,因为当i变成5时,表达式++i <= e
将再次被求值,i将被增加,结果是i=6
现在移动到第二个while循环,
为--i = 5
,即>=5 (as e=5)
所以循环被执行,并再次输出5。
要解决这个问题,只需在第一个while循环之后将i的值减少1,然后就可以了。
让我们讨论第一个输入:15。当你通过预加达到5时i,它输出i的值是5。然后再次返回while循环首先增加i的值(它达到6)然后检查6<=e的条件为false,则循环终止。
然后进入第二个循环。它首先减少值令i=5并检查是否i>=e这是真的,所以它打印I,在第一次迭代I的值小于e之后,它不打印任何东西。