一个 nnn 位数,只由 111,222,333,444,⋯\cdots⋯,ppp 这几个数字组成。 请编写程序输出这些n位数,先小后大,每行一个。
输入格式
两个整数 n,p(n≤5,p≤5)n,p(n\le5,p \le 5)n,p(n≤5,p≤5)。
输出格式
若干行数。
输出时每行末尾的多余空格,不影响答案正确性
样例输入复制
4 5
样例输出复制
1111 1112 1113 1114 1115 1121 1122 1123 1124 1125 1131 1132 1133 1134 1135 ...
【分析】给两个数n,p,打印所有的n位由小于等于p的数组成的数 (1≤n≤5,1≤p≤5)
递归出口:n == 1 ,最后一位由 1 到 p 打印;
递归体:sum(n) = i * 10^(n - 1) + sum(n-1);
【注】每次加完之后需要减去上一次加的数。
#include <cstdio>
#include <iostream>
#include <cmath>
using namespace std;
int sum;
void number(int n, int p) {
if (n == 1) for (int i = 1; i <= p; i++) {
printf("%d\n", sum + i);
}
else {
for (int i = 1; i <= p; i++) {
sum += i * pow(10, n - 1);
number(n - 1, p);
sum -= i * pow(10, n - 1);
}
}
}
int main() {
int n, p;
scanf("%d %d", &n, &p);
number(n, p);
return 0;
}