在两个正整数m和n给定的整数范围内(m 小于 n,且不包括m和n)取出各位数字之和均为k的倍数的所有数(k为正整数),然后将这些数划分成若干个子集合,每个子集合中的元素满足其各位数字之和相等,请输出各个子集合, 其中 n 不大于10000。
每个集合元素按从小到大输出,逗号间隔,如果有多个集合,则输出多行;集合中最小元素较小的在前面行输出。
例如,m=11, n=35, k=3
则,
12,21,30 这三个数的每位数字之和均为3,且为3的倍数
15,24,33 这三个数的每位数字之和为6,且为3的倍数
18,27 这二个数的每位数字之和为9,也为3的倍数
由于三组数的最小数分别是12,15,18,于是,输出结果应为:
12,21,30
15,24,33
18,27
一行,三个值:m,n,k,以逗号间隔
输出各位数之和为k的倍数的若干行,每一行中,其元素的各位数字和相等,且前面行元素的各位数字之和小于后面行元素的各位数字之和,每行的元素按增序排列,以逗号间隔。
11,35,3
12,21,30
15,24,33
18,27
#include<iostream> using namespace std; int numbersum(int m) { int sum = 0; while (m > 0) { sum += (m % 10); m /= 10; } return sum; } int main() { int m, n, k; char c; cin >> m >>c>> n >>c>> k; //m,n,k用逗号分隔,cin不能识别!! for (int i = k; i < 40; i += k) { bool first = 1; for (int j = m + 1; j < n; j++) { if (numbersum(j)==i) { if (first) { if (i != k) cout << endl << j; else cout << j; first = 0; } else cout << "," << j; } } } return 0; }