阿克劳斯 2020-09-11 21:59 采纳率: 100%
浏览 162
已采纳

C++中循环语句加入打印可跳出,不加打印会卡死

代码所要解决的题

# 我写的代码为:

#include <algorithm>
#include <cstdio>
#include <iostream>

using namespace std;
const int N = 4;
const int lis[] = { 1000, 100, 10, 1 };

bool compare(int a, int b) {
    return a > b;
}

int conv(char s1[], int n) {
    int ans;
    for (int i = 0; i < n; i++) {
        ans += (s1[i] - '0') * lis[i];
    }
    return ans;
}

int main(void) {
    char s[10];
    int dif, a1, a2, time = 0, tmp;
    cin >> s;

    while (1) {
        sort(s, s + N, compare);
        a1 = conv(s, N);

        sort(s, s + N);
        a2 = conv(s, N);

        dif = a1 - a2;

        // cout<<"a1:  "<<a1<<endl;
        // cout<<"a2:  "<<a2<<endl;
        //cout << "dif: " << dif << endl;

        time++;
        if (dif == 6174)
            break;

        for (int i = 3; i >= 0; i--) {
            s[i] = '0' + dif % 10;
            dif /= 10;
        }
    }
    cout << time;
    getchar();
    getchar();
    return 0;
}

直接运行,输入样例运行会卡死
但是如果加入对中间过程变量的打印语句(即代码中注释掉的部分),程序便可以正常运行。
甚至于,如果在while循环体中,加入任意的打印语句(如换行符,空格,制表符等等),都可以使程序不卡死,求解
(我知道解这道题有更简单的方法,但是我想知道这种写法卡死的原因,谢谢大佬)

  • 写回答

2条回答 默认 最新

  • 裔远 2020-09-12 15:58
    关注

    conv中,写ans=0;
    我调试了一下,发现不输出是因为dif根本不为6174,是ans没有初始化的原因。
    写完ans=0就能正常输出。
    而写输出语句ans就=0;???
    可能是内存释放?

    int conv(char s1[], int n){
        int ans=0;//不加输出语句不会清零
        for (int i = 0; i < n; i++) {
            ans += (s1[i] - '0') * lis[i];
        }
        return ans;
    }
    
    

    如果问题解决请采纳

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?