7-37

7-37 整数分解为若干项之和(20 分)

将一个正整数N分解成几个正整数相加,可以有多种分解方法,例如7=6+1,7=5+2,7=5+1+1,…。编程求出正整数N的所有整数分解式子。

输入格式:

每个输入包含一个测试用例,即正整数N (0<N≤30)。

输出格式:

按递增顺序输出N的所有整数分解式子。递增顺序是指:对于两个分解序列\(N_1={n_1,n_2,⋯}\)和\(N_2={m_1,m_2,⋯}\),若存在i使得\(n_1=m_1,⋯,n_i=m_i\),但是\(n_{i+1}<m_{i+1}\),则\(N_1\)序列必定在\(N_2\)序列之前输出。每个式子由小到大相加,式子间用分号隔开,且每输出4个式子后换行。

输入样例:

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

AC代码

#include<stdio.h>int N;int s[31]; // 存放划分结果,这里用了比较简单地容器,数组,比我想象的要简单
int top = -1; // 数组指针
int count = 0; // 统计输出的次数
int sum = 0; // 拆分项累加和 void division (int i);int main (){scanf ("%d", &N);division (1);return 0;
}void division (int i) {//拆分 if (sum == N) {count ++;printf("%d=", N);int k;for (k=0; k<top; k++) {printf("%d+", s[k]);}if (count%4 == 0 || s[top] == N) {printf("%d\n", s[top]);} else {printf("%d;", s[top]);}return;} // 输出部分 if (sum > N) {return;}for (int j=i; j<=N; j++) { s[++top] = j;sum += j; division (j);sum -= j;top --;} // 算法主体
}
#include<stdio.h>
#include<iostream>
using namespace std;
int flag = 0, n, a[35];
void f(int len, int pos, int next)
{if (pos + next > n)return;                    //如果值大于N就没有继续的必要了a[len++] = next;                //保存路径if (pos+next == n){cout << n << "=";for (int i = 0; i < len; i++){if (i == 0)    cout << a[i];else cout << "+" << a[i];}if (++flag % 4 == 0||next == n)cout << endl;        //每输出四个一次回车else cout << ";";                                                    //每行输出最后一个不带分号}if (pos + next < n){pos += next;for (int i = next; i <= n - pos; i++)//根据规律得出后面的i>=nextf(len, pos, i);}}
int main()
{cin >> n;for (int i = 1; i <= n / 2; i++)        //i小于n/2,防止7=3+4、7=4+3该类情况f(0, 0, i);f(0, 0, n);                    //7=7的时候特殊处理    return 0;
}

相关思考

5-37 整数分解为若干项之和 - 文之 - 博客园 https://www.cnblogs.com/andywenzhi/p/5738715.html

7-37 整数分解为若干项之和 - 我只有一件白T恤 - 博客园 http://www.cnblogs.com/zengguoqiang/p/8342519.html

我的想法和白T恤接近,这个递归也是极好的

算法的处理流程是:

  • 假设输入的 N 为 3:
第一层递归 第二层递归 第三层递归 主要执行细节
division (1) sum = 1,不跳出 division (1) sum = 2,不跳出 division (1) sum = 3 等于 N,输出当前序列 1 1 1, 跳出,执行 for 循环,sum 均大于 3,跳出,返回上一层 第三层 s[0] s[1] s[2] 动作 1 1 1 输出 1 1 2 跳出 1 1 3 跳出 1 1 4 跳出
开始处理 division (2) sum = 3,输出当前序列 1 2,然后跳出,执行 for 循环,均跳出 返回至上一层 返回至上一层 第二层 s[0] s[1] 动作 1 2 输出 1 3 跳出 1 4 跳出
开始处理 division (2) sum = 2,不跳出 division (2) sum = 4,跳出,返回上一层 第二层 s[0] s[1] 动作 2 2 跳出
开始处理 division (3) sum = 3, 输出当前序列 3,结束程序 返回至上一层 第一层 s[0] 动作 3 跳出
  • 箭头指明了各层之间的流动方向。

转载于:https://www.cnblogs.com/lingr7/p/9278458.html

7-37 整数分解为若干项之和(20 分)相关推荐

  1. 7-37 整数分解为若干项之和 (20 分)(dfs)

    7-37 整数分解为若干项之和 (20 分) 将一个正整数N分解成几个正整数相加,可以有多种分解方法,例如7=6+1,7=5+2,7=5+1+1,-.编程求出正整数N的所有整数分解式子. 输入格式: ...

  2. 7-14 整数分解为若干项之和 (15分)(附详细讲解(不用递归的高效算法))

    将一个正整数N分解成几个正整数相加,可以有多种分解方法,例如7=6+1,7=5+2,7=5+1+1,-.编程求出正整数N的所有整数分解式子. 输入格式: 每个输入包含一个测试用例,即正整数N (0&l ...

  3. 整数分解为若干项之和

    7-37 整数分解为若干项之和 (20 分) 将一个正整数N分解成几个正整数相加,可以有多种分解方法,例如7=6+1,7=5+2,7=5+1+1,-.编程求出正整数N的所有整数分解式子. 输入格式: ...

  4. 整数分解成若干项之和(DFS)拓展延伸

    在深度优先搜索的例题中,有一种题型是整数分解成若干项之和. 例如将一个正整数N分解成几个正整数相加,可以有多种分解方法,例如7=1+6,7=2+5,7=1+1+5,-.编程求出正整数N的所有整数分解式 ...

  5. 整数分解为若干项之和python_SVD奇异值分解及Python实例

    1. 普通方阵的矩阵分解(EVD) 我们知道如果一个矩阵 A 是方阵,即行列维度相同(mxm),一般来说可以对 A 进行特征分解: 其中,U 的列向量是 A 的特征向量,Λ 是对角矩阵,Λ 对角元素是 ...

  6. 史上最全的整数分解方法(包含经典的分苹果问题)

    [华为OD机试真题 2022&2023]真题目录 @点这里@ [华为OD机试真题]信号发射和接收 &试读& @点这里@ [华为OD机试真题]租车骑绿道 &试读& ...

  7. 分解连续自然数的和_将整数分解为连续自然数之和

    将一个正整数,拆分成连续的自然数之和,输出所有可能的情况 例如: 3 = 1+2 10 = 1+2+3+4 18 = 5+6+7 偶然见到这个问题,这里写下自己的解法. 分析: 对给定整数x以及一组满 ...

  8. 形如:1/a 的分数称为单位分数。可以把1分解为若干个互不相同的单位分数之和。

    形如:1/a 的分数称为单位分数.可以把1分解为若干个互不相同的单位分数之和. 例如: 1 = 1/2 + 1/3 + 1/9 + 1/18 1 = 1/2 + 1/3 + 1/10 + 1/15 1 ...

  9. 形如:1/a 的分数称为单位分数。 可以把1分解为若干个互不相同的单位分数之和。 例如: 1 = 1/2 + 1/3 + 1/9 + 1/18 1 = 1/2 + 1/3 + 1/10 + 1/1

    形如:1/a 的分数称为单位分数. 可以把1分解为若干个互不相同的单位分数之和. 例如: 1 = 1/2 + 1/3 + 1/9 + 1/18 1 = 1/2 + 1/3 + 1/10 + 1/15 ...

最新文章

  1. ValueError: Bin labels must be one fewer than the number of bin edges
  2. 自学python需要买书吗-Python入门到精通学习书籍推荐!
  3. Python Django 基于通用视图实现图片的显示功能代码示例
  4. ITK:在不复制内存的情况下为每个像素添加常量
  5. mysql uuid_short 为什么不存在_MySQL内置函数uuid和uuid_short
  6. 7-8 最优服务次序问题 (10 分)
  7. P2157 [SDOI2009]学校食堂
  8. 使用 ServiceStack 构建跨平台 Web 服务(转)
  9. css那些事儿4 背景图像
  10. 奈雪的茶回应违规操作事件:虚心接受意见并及时改进
  11. GNOME API 参考
  12. linux 常用压缩命令,Linux常用的压缩及解压缩命令
  13. Atitit 摄像头与主机连接方式大总结
  14. 【python】excel文件(.xls文件)处理
  15. Shapefile属性操作之增
  16. android arcgis使用自定义图片背景底图(tif图片制作)
  17. android手机如何访问电脑tomcat服务器
  18. 服务器重装系统后网不通,服务器出现死机网络ping不通等问题处理
  19. (6.1)MATLAB机器人正、逆解中姿态求解的欧拉角的说明
  20. 理工男,我感觉 win10 挺好用的,一点不卡,为什么有那么多人买Macbook 呢?

热门文章

  1. 2017.3.20上午
  2. Mac 录制视频,并转为GIF格式
  3. 前端编程提高之旅(六)----backbone实现todoMVC
  4. Linux内核编译和运行
  5. Mac下下载android4.2源码,进行源码调试
  6. 《MANAGING THE DEVELOPMENT OF LARGE SOFTWARE SYSTEMS》总结
  7. git 远程分支创建与推送
  8. poj2479与poj2593 , 同一道DP题
  9. [转]谨以此文献给才毕业2--5年的朋友
  10. auto.js停止所有线程_十年架构师带你快速上手多线程