程式整體思路
:分解就是乙個數減1,這個數後面的數加1
一次分解之後
找到最後乙個比1大的元素座標,然後與上一次相比,如果座標發生了偏移,那麼會發生向後偏移,說明又開始有乙個數需要分解,這個時候需要增加乙個元素,該情況下其實就是新出現了2;此時這個座標是2所在的位置
將2分解完畢之後,再繼續找比1大的元素座標那麼這個座標應該向前偏移(2已經沒有了,應該是2前面的數)。如果繼續分解下去那麼應該回到向後偏移之前的樣子,所以此處需要復原函式,復原之後不找座標了,而是直接將原m位置元素分解,然後繼續重複之前的步驟。
此處輸出部分值得注意,如果符合遞增排序就可以輸出(但同時還要控制,復原之後不能輸出,並且還要注意復原之後不找座標),如果不符合遞增就繼續分解。
**如下
#include
void
print
(int a,
int j,
int n)
printf
("\n");
}int
zhao
(int a,
int j)
return i;
}int
zeng
(int a,
int n)
}return flag;
}void
huanyuan
(int a,
int m,
int j)
a[m+1]
=sum;
}int
main
(void
),n,m=
0,u=
0,j,flag=1;
scanf
("%d"
,&n)
; a[0]
=n-1
;a[1]=
1;j=2;
print
(a,j,n)
;while
(a[0]!=
0)else
if(m>u)
else
if(mzeng
(a,j)
&&flag!=0)
print
(a,j,n);}
return0;
}
以上為個人觀點,若有不當請指正 正整數分解演算法
問題 將以正整數n表示成一系列正整數之和.n n1 n2 n3 nk n1 n2 n3 nk 1,k 1 這就是正整數n的乙個劃分,正整數n不同的劃分個數稱為正整數n的劃分數,記作p n 例如 6 有如下11種劃分則p 6 116 5 1 4 2,4 1 1 3 3,3 2 1,3 1 1 1 2 ...
程式4 正整數分解質因數
題目 將乙個正整數分解質因數。例如 輸入90,列印出90 2 3 3 5。程式分析 對n進行分解質因數,應先找到乙個最小的質數k,然後按下述步驟完成 1 如果這個質數恰等於n,則說明分解質因數的過程已經結束,列印出即可。2 如果n k,但n能被k整除,則應列印出k的值,並用n除以k的商,作為新的正整...
將整數分解為連續正整數之和
將乙個整數 n 分解為連續正整數之和,如 15 可以分解為 15 1 2 3 4 5 15 4 5 6 15 7 8 計算從 i 開始連續 k 個數之和 sum k 2 i k 1 2 當 sum n 時,有 k k 2 i 1 k 2 n 0 變形為 i 2 n k k 1 2。在 2,2 n k...