You need to enable JavaScript to run this app. Codechef竞赛CCRR2021-CCRR002题 C++代码Wrong Answer问题分析
优惠活动
大模型
产品
解决方案
定价
更多

Codechef竞赛CCRR2021-CCRR002题 C++代码Wrong Answer问题分析

代码错误点梳理
  • 浮点数精度引发的循环范围错位:pow()函数返回值为双精度浮点数,受浮点数存储特性影响,计算10的整数次幂时可能出现微小误差(例如理论值100,实际计算结果为99.9999999,强转为整型后变为99),直接导致循环起止边界错误,要么漏算合法值,要么纳入长度不符的数字。
  • 密码合法性筛选逻辑错误:题目要求密码每一位的取值范围都是1~9,不允许出现0。原代码仅判断数字最后一位是否为0,完全没有识别中间位的0值。例如长度为3的102、305这类包含0的非法密码,会因为最后一位非0被错误输出。
  • 不符合题目要求的解题逻辑:题目明确要求通过递归方式生成所有合法密码,原代码采用全局遍历的暴力逻辑,即使运行结果偶发正常也无法通过判题系统的校验。
修正后的正确代码
#include<bits/stdc++.h>
using namespace std;

// 递归逐位拼接生成合法密码
void buildPwd(int currentPos, int targetLen, string pwd) {
    // 递归终止条件:当前密码长度达到目标值,直接输出
    if (currentPos == targetLen) {
        cout << pwd << '\n';
        return;
    }
    // 每一位仅取1~9的合法数字递归拼接
    for (int num = 1; num <= 9; num++) {
        buildPwd(currentPos + 1, targetLen, pwd + to_string(num));
    }
}

int main() {
    int T;
    cin >> T;
    while (T--) {
        int l;
        cin >> l;
        buildPwd(0, l, "");
    }
    return 0;
}

内容的提问来源于stack exchange,提问作者Anshul Sharma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.06 03:06:05