c語言整數劃分
A. c語言整數劃分 n>m的時候怎麼求出這個遞推式
intf(intn,intm)
{
if(n==1||m==1)
return1;
elseif(n<m)
returnf(n,n);
elseif(n==m)
return1+f(n,m-1);
elseif(n>m)
returnf(n-m,m)+f(n,m-1);
}
B. c語言整數劃分問題
C語言作為計算機最重要的一種語言,關於它的資料是不計其數的。我早看夠了Turbo C那個環境。
我剛剛下載了一個用於C 語言的windows編譯環境wintc191 ,它比Turbo C要好很多的。實在是太棒了!軟體主要特色:
1.在WINDOWS下編輯TC代碼,可以充分利用WINDOWS的支持剪貼版和中文的特點
2.Include和Lib路徑自動定位,告別TC設置路徑的歷史
3.編譯錯誤捕捉功能,編譯時不會出現煩人的DOS窗口
4.支持C內嵌匯編從而實現C/ASM混合編程
5.支持C擴展庫(自定義LIB庫)
6.錯誤警告定位功能、出現編譯錯誤時雙擊輸出框里的出錯行信息可以自動尋找到錯誤的行,就像DOS的TC那樣
7.支持語法加亮功能,並可以自定義設置
8.沒有目錄路徑限制,你甚至可以安裝到帶有空格的路徑文件夾里
9.允許自定義設置輸入風格,能夠實現VC類似的輸入風格
10.可選擇是否生成ASM、MAP或OBJ文件,你甚至可以指定只生成EXE文件
11.穩定的文件操作功能,支持歷史記錄列表和使用模板
12.撤消和重復功能,並可以按照自己內存情況設置最多撤消次數(最多允許999次)
13.具有行標計數的功能,並可以設置樣式
該軟體的下載地址是: 直接雙擊這個地址就可以下載了。這個地址我剛剛試過的,所以我只給了你這一個地址。
C語言學習系統是有很多的版本的,可以在「迅雷」裡面搜索。當然很多的免費的學習系統比那些需要注冊的還要好很多的。晨輝的那個學習系統我個人感覺不怎麼樣,建議你在一些專業的C語言學習網站上去找一個更好的吧。
C. 整數劃分問題
我這里有個C語言的,是輸出所有劃分的。
你自己嘗試一下改成JAVA的吧。
#include "stdio.h"
void main()
{
int n;
scanf("%d", &n);
if (n == 1)
{
printf("1=1\n");
return;
}
if (n == 2)
{
printf("2=1+1\n");
return;
}
int *a = new int(n);
int top = 0;
a[0] = n - 1;
a[1] = 1;
top = 2;
int i;
do{
printf("%d=%d", n, a[0]);
for (i = 1; i < top; i++)
{
printf("+%d", a[i]);
}
printf("\n");
int s = 0;
do{
s += a[--top];
}while (top >= 0 && a[top] == 1);
if (top == -1)
{
break;
}
int d = a[top] - 1;
if (d == 1)
{
while (s > 0)
{
a[top++] = 1;
s--;
}
}
else
{
do{
a[top++] = d;
s -= d;
}while (s >= d);
if (s != 0)
{
a[top++] = s;
}
}
}while (1);
}
D. 如何用c++求解整數劃分問題
貼個C語言的:*
描述 Description �0�2
�0�2 將整數n分成k份,且每份不能為空,任意兩份不能相同(不考慮順序)。
例如:n=7,k=3,下面三種分法被認為是相同的。
1,1,5; 1,5,1; 5,1,1;
問有多少種不同的分法。
�0�2
�0�2 �0�2
�0�2 �0�2
�0�2輸入格式 Input Format �0�2
�0�2 輸入n,k (6<n<=200,2<=k<=6) �0�2
�0�2 �0�2
�0�2 �0�2
�0�2輸出格式 Output Format �0�2
�0�2 一個整數,即不同的分法。�0�2
�0�2Input : 7 3
�0�2output: 4
*/
/*
解題思路:�0�2
我用的是一種比較慢的搜索擴展方法:
比如:
�0�27 = 1+6 6 又可以擴展成:6 = 1+5 很顯然這是一個遞歸的過程
�0�27 = 2+5 5 --> 5= 2+3 不過要注意的是:只要在擴展過程中保證當前所擴展的值不小於前一個即可
�0�27 = 3+4
*/
#include <stdio.h>
#define MAX 101
int n,k ;
long total = 0 ;
void fenjie(int s,int t,int end,int *sum)
{
�0�2 int p,q ;
�0�2 �0�2
�0�2 if(t == k)/*找到一個*/
�0�2 {
�0�2 total ++ ;
�0�2 /*for(q = 1 ; q <= k ; q++)
�0�2 printf("%d ",sum[q]);
�0�2 printf(" ");*/
�0�2 }
�0�2 �0�2
�0�2 else
�0�2 {
�0�2 for(p=s ; p<=end/2 ; p++)
�0�2 {
�0�2 sum[t] = p;
�0�2 sum[t+1] = end-p;
�0�2 �0�2
�0�2 fenjie(p,t+1,sum[t+1],sum); /*方法是從當前結點擴展開出,遞歸進行求解*/
�0�2 }
�0�2 }
�0�2 �0�2
}
int main(void)
{
�0�2 int i,j,sum[MAX] = {0};
�0�2
�0�2 �0�2
�0�2 scanf("%d %d",&n,&k);
�0�2 �0�2
�0�2 for(i=1 ; i<=n/2 ; i++)
�0�2 {
�0�2 sum[1] = i ;
�0�2 sum[2] = n-i;
�0�2 �0�2
�0�2 fenjie(i,2,sum[2],sum);
�0�2 }
�0�2 printf("%ld ",total);/*output the result*/
�0�2 �0�2
�0�2 �0�2
�0�2 return 0 ;
}
E. c語言整數劃分
已經devc++編譯通過,輸入5 2時結果為7 2 3 3 3 程序如下: #include <stdio.h> #include <string.h> const int maxn = 51; int n, k, f[maxn][maxn], g[maxn][maxn]; int f1[maxn][maxn], f2[maxn][maxn]; int main () { int i, j; int ans1, ans2, ans3, ans4, ans5; f1[0][0] = 1; for (i = 1; i < maxn; i ++) for (j = 1; j <= i; j ++) f1[i][j] = f1[i - j][j] + f1[i - 1][j - 1]; f[0][0] = g[0][0] = 1; for (i = 1; i < maxn; i ++) for (j = 1; j <= i; j ++) { g[i][j] = f[i - j][j]; f[i][j] = f[i - 1][j - 1] + g[i - j][j]; } for (i = 0; i < maxn; i ++) f2[i][0] = 1; for (i = 1; i < maxn; i ++) for (j = 1; j < maxn; j ++) { f2[i][j] = f2[i - 1][j]; if (j - i >= 0) f2[i][j] += f2[i - 1][j - i]; } while (scanf ("%d %d", &n, &k) != EOF) { ans1 = ans2 = ans3 = ans4 = ans5 = 0; for (i = 1; i <= n; i ++) ans1 += f1[n][i]; ans2 = f1[n][k]; for (i = 1; i <= k; i ++) ans3 += f1[n][i]; for (i = 1; i <= n; i ++) ans4 += f[n][i]; ans5 = f2[n][n]; printf ("%d\n%d\n%d\n%d\n%d\n", ans1, ans2, ans3, ans4, ans5); } return 0; }
F. C語言寫一個整數劃分的程序
#include<stdio.h>
int
main()
{
int i,j,n,sum,flag;
scanf("%d",&n);
for(i=n-1;i>=1;i--){
for(j=i;j>=1;j--)
if(i+j==n)printf("%d+%d ",i,j);
else if(i+j>n)continue;
else {
printf("%d+%d",i,j);
sum=i+j;
flag=0;
for(int t=j;t>=1;t--){
if(sum+t==n){
flag=1;
printf("+%d ",t);
}
if(sum+t<n){
if(flag==1){
printf("%d+%d",i,j);
sum=i+j;
flag=0;
}
printf("+%d",t);
sum+=t;
t++;
}
}
}
printf("\n");
}
return 0;
}
G. C語言 遞歸演算法 整數劃分問題
#include<stdio.h>
intstack[100];
inttop;
inttotal,n;
voiddfs(intindex)
{
inti;
if(total==n)
{
printf("%d=",n);
for(i=top-1;i>0;i--)
printf("%d+",stack[i]);
printf("%d ",stack[0]);
}
if(total>n)
return;
for(i=n-1;i>=index;i--)
{
total+=i;
stack[top++]=i;
dfs(i);
total-=i;
stack[--top];
}
}
voidmain()
{
while(scanf("%d",&n)!=EOF)
{
top=0;
total=0;
dfs(1);
}
}
H. C語言整數劃分求解
源代碼如下:
希望能幫助到你。
#include <stdio.h>
int d[10]; /* 用來存放分解結果 */
void decompose(int m, int n, int k); /* 將m分解為不大於n的組成數,k>=0是項號 */
int main()
{
int n;
printf("input n (1 <= n <= 10):");
scanf("%d", &n);
if (n>=1 && n<=10) {
decompose(n, n, 0);
}
return 0;
}
void decompose(int m, int n,int k)
{
int i;
if (m == 0) { /* 當m為0時,得到一個劃分,將分解結果輸出 */
printf("%d", d[0]);
for (i=1; i<k; i++)
printf("+%d", d[i]);
for (i=1; i< k; i++) /* for + if 處理輸出格式 */
if (d[i] != 1)
break;
if (i == k) {
printf("\n");
}
else
printf(", ");
return;
}
for (i=(m<n?m:n); i>0; i--) { /* 一次分解的幾種可能分法 */
if (i < n)
d[k] = i;
else
d[k] = n;
decompose(m-d[k], d[k], k+1); /* 遞歸調用使分解繼續下去,直到得到一個劃分 */
}
}