top1编程
← 返回题目
题解

组成两位数

1 条题解

  • 0
    @ 2026-8-5 21:17:14

    P4400 组成两位数(入门)

    解题思路

    用数字 1、2、3、4、5、6 组成两位数,要求十位和个位不能重复。比如 12 可以,11 不行(两个 1 重复了),21 也可以。

    因为只有十位和个位两个位置,最直接的办法就是"双重循环枚举":外层循环枚举十位 i(从 1 到 6),内层循环枚举个位 j(从 1 到 6)。如果 i 不等于 j,说明十位和个位不重复,就输出 i × 10 + j。i × 10 + j 就是把十位乘 10 再加上个位,拼出这个两位数。

    看样例:十位是 1 时,个位可以是 2、3、4、5、6,输出 12、13、14、15、16;十位是 2 时,个位可以是 1、3、4、5、6,输出 21、23、24、25、26……依此类推,直到十位是 6 时输出 61、62、63、64、65。

    边界情况:i == j 时(11、22、33、44、55、66 这 6 个)要跳过不输出。十位和个位都从 1 到 6,最小的两位数是 12,最大的是 65。一共能组成 6 × 5 = 30 个两位数,和样例输出的行数一致。

    参考代码

    // 程序用途:用数字1~6组成十位个位不重复的两位数,全部输出
    #include <iostream>
    using namespace std;
    
    int main() {
        for (int i = 1; i <= 6; i++) {       // i:十位上的数字
            for (int j = 1; j <= 6; j++) {   // j:个位上的数字
                if (i != j) {                // 十位和个位不能重复
                    cout << i * 10 + j << endl;   // i*10+j把十位和个位拼成两位数
                }
            }
        }
        return 0;
    }
    

    复杂度分析

    十位有 6 种选择、个位有 6 种选择,一共枚举 6 × 6 = 36 次,次数固定,时间复杂度是 O(1);空间上只用循环变量 i、j,额外空间复杂度是 O(1)。

    • 1