《数据结构学习与实验指导》2-3:整数分解为若干项之和
2017-06-07 21:35
344 查看
实验内容:将一个正整数N分解成几个正整数相加,可以有多种分解方法,例如7=6+1,7=5+2,7=5+1+1,……。编程求出正整数N的所有整数分解式子。
输入说明:输入正整数N(0<=N<=30)。
输出说明:按递增顺序输出N的所有整数分解式子。每个式子由小到大相加,式子间用分号隔开,且每输出4个式子后换行。
测试用例:
输入 | 输出
1 | 1=1
3 | 3=1+1;3=1+2;3=3;
7 | 7=1+1+1+1+1+1+1;7=1+1+1+1+1+2;7=1+1+1+1+3;7=1+1+1+2+2
7=1+1+1+4;7=1+1+2+3;7=1+1+5;7=1+2+2+2;
7=1+2+4;7=1+3+3;7=1+6;7=2+2+3;
7=2+5;7=3+4;7=7
输入说明:输入正整数N(0<=N<=30)。
输出说明:按递增顺序输出N的所有整数分解式子。每个式子由小到大相加,式子间用分号隔开,且每输出4个式子后换行。
测试用例:
输入 | 输出
1 | 1=1
3 | 3=1+1;3=1+2;3=3;
7 | 7=1+1+1+1+1+1+1;7=1+1+1+1+1+2;7=1+1+1+1+3;7=1+1+1+2+2
7=1+1+1+4;7=1+1+2+3;7=1+1+5;7=1+2+2+2;
7=1+2+4;7=1+3+3;7=1+6;7=2+2+3;
7=2+5;7=3+4;7=7
#include <stdio.h> #define MaxSize 30 int Terms[MaxSize]; int count = 0; int N; void resolve(int reminder, int start, int nTerm); int main(int argc, const char * argv[]) { scanf("%d", &N); resolve(N, N, 0, 1); if (count % 4 != 0) { printf("\n"); } return 0; } void resolve(int reminder, int start, int nTerm) { if (reminder == 0) { if (count % 4 != 0) { printf("; "); } printf("%d=%d", N, Terms[0]); for (int i = 1; i < nTerm; i++) { printf("+%d", Terms[i]); } count++; if (count % 4 == 0) { printf("\n"); } } else { for (int i = start; i <= reminder; i++) { Terms[nTerm] = i; resolve(reminder - i, i, nTerm + 1); } } }
相关文章推荐
- 5-37 整数分解为若干项之和(递归)
- (PTA)7-1 整数分解为若干项之和
- 7-37 整数分解为若干项之和
- 5-37 整数分解为若干项之和 (20分)
- pta 5-37 整数分解为若干项之和 (递归)
- 5-37 整数分解为若干项之和 (20分)
- 整数分解成若干项之和(DFS)拓展延伸
- 整数分解为若干项之和
- PTA 7-1 整数分解为若干项之和(20 分)
- 5-37 整数分解为若干项之和
- PTA 7-12 整数分解为若干项之和(20 分)
- pat 整数分解为若干项之和
- 5-37 整数分解为若干项之和 (20分)
- PTA 5-37 整数分解为若干项之和
- PTA 整数分解为若干项之和
- 7-1 整数分解为若干项之和(20 分)
- 整数分解为若干项之和——递归思想
- (递归)整数分解为若干项之和
- cccc --5-3 整数分解为若干项之和
- 5-37 整数分解为若干项之和