整数分解为若干项之和

深度搜索,一开始没有想到,说明基本功还是不够啊,加油

//============================================================================
// Name        : PTA.cpp
// Author      : pprp
// Version     : 1.0
// Copyright   : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>

using namespace std;

int N;
int a[1000];
int top = -1;
int sum = 0;
int cnt = 0;

void division(int i){
	if(sum == N){
		cnt++;
		cout << N <<"=";
		for(int k = 0 ; k < top ; k++){
			printf("%d+",a[k]);
		}
		if(cnt % 4 == 0 || a[top] == N){
			printf("%d
",a[top]);
		}else
		{
			printf("%d;",a[top]);
		}
		return ;
	}
	if(sum > N)return ;
	for(int j = i ; j <= N; j++){
		a[++top] = j;
		sum += j;
		division(j);
		sum -= j;
		top--;
	}
}

int main() {
	cin >> N;
	division(1);
	return 0;
}
原文地址:https://www.cnblogs.com/pprp/p/8609930.html