You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++控制台空白/崩溃求助:实现Tanya减一算法出错

代码问题排查与修正

问题点分析

  • 未初始化变量引发未定义行为
    counter变量声明后未赋值,初始值是随机垃圾值,导致内层while循环的判断逻辑完全混乱,大概率会触发死循环,直接造成控制台崩溃或无输出。

  • 循环结构逻辑冲突
    外层已经用for循环控制执行k次操作,内层又嵌套while循环,双重循环会让操作次数完全偏离预期,甚至陷入无限循环。

  • 状态未及时更新
    修改n的值后,last变量没有同步更新(比如n除以10后,新的最后一位应该重新计算n%10),导致后续判断一直基于旧的最后一位,逻辑完全错误。

  • 规则实现错误
    按照题目规则,当数字最后一位为0时,只需要将n除以10,代码里的n-=1是多余的错误操作。


修正后的代码

#include <iostream>
using namespace std;

int main() {
    int n, k;
    cin >> n >> k;
    
    for (int i = 0; i < k; ++i) {
        if (n % 10 != 0) {
            n -= 1;
        } else {
            n /= 10;
        }
        // 提前终止优化:n为0时再操作结果不变
        if (n == 0) break;
    }
    
    cout << n << endl;
    return 0;
}

修正说明

  1. 移除了多余的counter和last变量,直接每次计算n%10判断最后一位,避免状态不同步的问题
  2. 用单层for循环准确控制k次操作,同时增加提前终止逻辑提升效率
  3. 修正了else分支的错误操作,严格贴合题目规则
  4. 替换了过于庞大的<bits/stdc++.h>,改用更轻量化的<iostream>(初学者建议按需引入头文件)

内容的提问来源于stack exchange,提问作者Yes_ _Br0

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 13:45:43