【题目描述】
任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和。
当n=7共14种拆分方法:
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 total=14
【输入】
输入n。
【输出】
按字典序输出具体的方案。
【输入样例】
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
#include<stdio.h> int n; int p[1000]; void dfs(int m, int step) { if (m > n) return; else if (m == n) { printf("%d=", n); for (int i = 1; i < step; i++) { printf("%d+", p[i]); } printf("%d\n", p[step]); } else { for (int i = p[step]; i < n; i++) { p[step + 1] = i; dfs(m + i, step + 1); } } } int main() { scanf("%d", &n); p[0] = 1; dfs(0, 0); return 0; }
一本通 1318:【例5.3】自然数的拆分
最新推荐文章于 2023-07-22 15:01:01 发布