分治法寫劃分數

1.問題描述

給出一個數,將這個數表示爲一系列的正整數之和。求有多少種可能

2.算法思想

分治法,分而治之

第一種:當最大的劃分數爲1的時候只有一種可能  6=1+1+1+1+1+1

第二種:當最大劃分數大於劃分數時候, 是最大劃分數等於劃分數,也就是計算次劃分數的所有可能性

第三種:當最大劃分書等於劃分數時候,計算劃分數的全部可能性

第四種:當最大劃分數小於劃分數的時候,計算此時的所有可能性

3:.算法代碼

<span style="font-size:18px;">#include<stdio.h>
int p(int n,int m){
	if(m==1||n==1) return 1;
	if(m>n) return p(n,n);  
	if(m==n) return p(n,m-1)+1;
	return p(n,m-1)+p(n-m,m);
} 
main(){
	int n,s,m;
	printf("請輸入一個正整數n\n");
	scanf("%d",&n);
	printf("請輸入最大加數m\n");
	scanf("%d",&m);
	s=p(n,m);
	printf("數%d的最大劃分數爲%d\n",n,s);	
}</span>



發佈了73 篇原創文章 · 獲贊 10 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章