一种等价类划分问题
2021/10/15 23:14:41
本文主要是介绍一种等价类划分问题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
题目描述
在两个正整数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; }
这篇关于一种等价类划分问题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-09-28AI给的和自己写的Python代码,都无法改变输入框的内容,替换也不行
- 2024-09-27Sentinel配置限流资料:新手入门教程
- 2024-09-27Sentinel配置限流资料详解
- 2024-09-27Sentinel限流资料:新手入门教程
- 2024-09-26Sentinel限流资料入门详解
- 2024-09-26Springboot框架资料:初学者入门教程
- 2024-09-26Springboot框架资料详解:新手入门教程
- 2024-09-26Springboot企业级开发资料:新手入门指南
- 2024-09-26SpringBoot企业级开发资料新手指南
- 2024-09-26Springboot微服务资料入门教程