题解
组成两位数
1 条题解
-
0
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