当前位置: 首页> 文旅> 酒店 > 长沙品牌设计_西安大型网站建设公司_深圳seo优化推广_泰安网站推广优化

长沙品牌设计_西安大型网站建设公司_深圳seo优化推广_泰安网站推广优化

时间:2025/9/6 11:19:41来源:https://blog.csdn.net/LH_050902/article/details/145802524 浏览次数:0次
长沙品牌设计_西安大型网站建设公司_深圳seo优化推广_泰安网站推广优化

以下代码会死循环:

#include<iostream>
using namespace std;
int n,res;
int main(){cin>>n;for(int i=1;i<=n;i++){int x=i;while(i){int t=i%10;i/=10;if(t==2||t==0||t==1||t==9){res+=x;break;}}}cout<<res<<endl;return 0;
}

你的代码中存在一个逻辑错误,导致程序进入了死循环。具体来说,问题出在 while(i) 这个循环中。你在 while 循环中修改了 i 的值(i /= 10),这会导致外层 for 循环的 i 也被修改,从而导致 for 循环无法正常结束。

问题分析:

  • 外层 for 循环的 i 从 1 到 n 递增。

  • 在 while(i) 循环中,i 被修改为 i / 10,这会导致 i 的值在 for 循环中被错误地修改。

  • 当 i 被修改为 0 时,for 循环的 i++ 会再次将 i 设置为 1,从而导致死循环。

解决方法:

为了避免修改外层 for 循环的 i,你可以在 while 循环中使用一个临时变量来代替 i

修改后的代码:

#include<iostream>
using namespace std;int n, res;int main() {cin >> n;for (int i = 1; i <= n; i++) {int x = i;int temp = i;  // 使用临时变量 temp 来代替 iwhile (temp) {int t = temp % 10;temp /= 10;if (t == 2 || t == 0 || t == 1 || t == 9) {res += x;break;}}}cout << res << endl;return 0;
}

解释:

  • 在 while 循环中,我们使用 temp 来代替 i,这样就不会影响外层 for 循环的 i

  • 这样,for 循环可以正常地从 1 到 n 递增,而不会进入死循环。

总结:

在嵌套循环中,尤其是当内层循环修改了外层循环的控制变量时,很容易导致死循环。为了避免这种情况,可以使用临时变量来代替外层循环的控制变量。

关键字:长沙品牌设计_西安大型网站建设公司_深圳seo优化推广_泰安网站推广优化

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: