栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

PTA 基础编程题目集 7-37 整数分解为若干项之和

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

PTA 基础编程题目集 7-37 整数分解为若干项之和

原题链接

问题描述

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

输入格式:
每个输入包含一个测试用例,即正整数N (0

输出格式:
按递增顺序输出N的所有整数分解式子。递增顺序是指:对于两个分解序列N1​={n1​,n2​,⋯}和N2​={m1​,m2​,⋯},若存在i使得n1​=m1​,⋯,ni​=mi​,但是ni+1​ 输入样例:
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

代码长度限制
16 KB
时间限制
800 ms
内存限制
64 MB

解析

本题运用递归求解,参考了CSDN某佬的解题思路。
定义的函数divide(int n,int start,int index)用来将整数n分解,退出递归的条件是n==0,即无法再进行分解。n表示将要被分解的数,start表示分解起点,index表示分解结果存放的数组res的下标。
还需注意表达式之间的’;'和换行问题。

代码
#include 
using namespace std;

int N;
int res[35];//res数组用来存放分解的结果 
int cnt=0;

void divide(int n,int start,int index)//n表示将要被分解的数,start表示分解起点,index表示分解结果存放的数组下标 
{
	if(n==0)//n==0表示当前数无序再被分解,退出递归 
	{
		cout<
			cnt=0;
			cout<<'n';
		}
	}
	else
	{
		for(int i=start;i<=n;i++)
		{
			res[index]=i;
			divide(n-i,i,index+1);
		}
	}
}

int main()
{
	cin>>N;
	divide(N,1,0);
	return 0;	
} 
运行结果

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/979706.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号