当前位置: 首页 > news >正文

“死”循环(查漏补缺)

以下代码会死循环:

#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 来代替 i
        while (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 递增,而不会进入死循环。

总结:

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

相关文章:

  • 055 SpringCache
  • cs106x-lecture14(Autumn 2017)-SPL实现
  • 【Java进阶学习 第五篇】JDK8、9中的接口新特性
  • ARM Cortex-M3 技术解析:核寄存器R1-R15介绍及使用
  • 第五章:工程化实践 - 第三节 - Tailwind CSS 大型项目最佳实践
  • kafka+spring cloud stream 发送接收消息
  • 华为OD机试真题-相对开音节-OD统一考试(E卷)
  • Meterpreter之getsystem命令提权原理详解
  • Zotero 快速参考文献导出(特定期刊引用)
  • 区块链相关方法-波士顿矩阵 (BCG Matrix)
  • Codes 开源免费研发项目管理平台 2025年第一个大版本3.0.0 版本发布及创新的轻IPD实现
  • 在LangFlow中集成OpenAI Compatible API类型的大语言模型
  • 不同类型的网站选择不同的服务器,那么应该怎么选择服务器呢?
  • STM32-心知天气项目
  • python包重要修改
  • 如何把windows机器作为SSH客户端免密登录
  • Markdown使用方法文字版解读
  • 数据表的存储过程和函数介绍
  • OpenBMC:BmcWeb app.run
  • tortoiseGit的使用和上传拉取
  • 厦门知名做企业网站设计的公司/免费建站的网站哪个好
  • 切片工具做网站怎么做/百度云客服人工电话
  • 有哪些做特卖的网站有哪些/北京建站公司
  • 石家庄最新新闻事件/郑州网站优化推广
  • 京东联盟需要自己做网站吗/seo全称是什么
  • 什么网站可以免费做视频的软件有哪些/东营seo