整數分解成若干項之和(DFS)拓展延伸
在深度優先搜尋的例題中,有一種題型是整數分解成若干項之和。
例如將一個正整數N分解成幾個正整數相加,可以有多種分解方法,例如7=1+6,7=2+5,7=1+1+5,…。程式設計求出正整數N的所有整數分解式子。
這類題就是用了一般的深搜解法
#include<cstdio>
int a[10];
int n,top=-1,sum=0;
void dfs(int i)
{
if(sum==n)
{
printf("%d=",n);
for(int j=0;j<top;j++)
printf("%d+",a[j]);
printf ("%d\n",a[top]);
return;
}
if(sum>n)
return;
for(int k=i;k<=n;k++)
{
a[++top]=k;
sum+=k;
dfs(k);
sum-=k;
top--;
}
}
int main()
{
scanf("%d",&n);
dfs(1);
return 0;
}
若此題換一種問法,也是求整數的若干項之和,但加了一個條件,若干項中不可有重複項。此時便需要在dfs函式中額外加個引數,此時,i表示項數之和,m表示有幾項,程式碼如下
#include<cstdio>
int a[1000];
int n;
void dfs(int i,int m)
{
if(i==n)
{
printf("%d=",n);
for(int j=0;j<m-1;j++)
printf("%d+",a[j]);
printf("%d\n",a[m-1]);
return;
}
if(i>n)
return;
for(int k=i+1;k<=n;k++)
{
a[m ]=k;
dfs(i+k,m+1);
}
}
int main()
{
scanf("%d",&n);
dfs(0,0);
return 0;
}
小白還是菜鳥一枚,哪有不足,望大佬們批評指正。
相關推薦
整數分解成若干項之和(DFS)拓展延伸
在深度優先搜尋的例題中,有一種題型是整數分解成若干項之和。 例如將一個正整數N分解成幾個正整數相加,可以有多種分解方法,例如7=1+6,7=2+5,7=1+1+5,…。程式設計求出正整數N的所有整數分解式子。 這類題就是用了一般的深搜解法 #inclu
7-1 整數分解為若干項之和(20 分)(dfs)
思路:不帶標記的dfs,只要沒有超過和就不斷dfs直到超過了之後向前回溯。 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<math
PTA7-37 整數分解為若干項之和(20 分)超級詳解
將一個正整數N分解成幾個正整數相加,可以有多種分解方法,例如7=6+1,7=5+2,7=5+1+1,…。程式設計求出正整數N的所有整數分解式子。輸入格式:每個輸入包含一個測試用例,即正整數N (0<N≤30)。輸出格式:按遞增順序輸出N的所有整數分解式子。遞增順序是指:
7-37 整數分解為若干項之和(20 分)
題目連結(組合版):點選開啟連結題目大意:略。解題思路:此方法僅限於輸出組合情況,計數的話會TLE。附加題目(計數版):點選開啟連結AC 程式碼(組合版)#include<bits/stdc++.
PTA 7-12 整數分解為若干項之和(20 分)
將一個正整數N分解成幾個正整數相加,可以有多種分解方法,例如7=6+1,7=5+2,7=5+1+1,…。程式設計求出正整數N的所有整數分解式子。 輸入格式: 每個輸入包含一個測試用例,即正整數N (0 < N ≤ 30)。 輸出格式: 按遞增順序輸出N的所有整數分解式
整數分解為若干項之和(20 分)
將一個正整數N分解成幾個正整數相加,可以有多種分解方法,例如7=6+1,7=5+2,7=5+1+1,…。程式設計求出正整數N的所有整數分解式子。 輸入格式: 每個輸入包含一個測試用例,即正整數N
pta 5-37 整數分解為若干項之和 (遞迴)
5-37 整數分解為若干項之和 (20分) 將一個正整數N分解成幾個正整數相加,可以有多種分解方法,例如7=6+1,7=5+2,7=5+1+1,…。程式設計求出正整數N的所有整數分解式子。 輸入格式: 每個輸入包含一個測試用例,即正整數N (0<<
(遞迴)整數分解為若干項之和
輸入樣例: 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+
(PTA)7-1 整數分解為若干項之和
題目 將一個正整數N分解成幾個正整數相加,可以有多種分解方法,例如7=6+1,7=5+2,7=5+1+1,…。程式設計求出正整數N的所有整數分解式子。 輸入格式: 每個輸入包含一個測試用例,即正整數N (0 輸出格式: 按遞增順
將整數分解成若干項相加的形式
#include<stdio.h> #define MAXN 30 int Terms[MAXN]; int count;//count表示輸出結果數 int N;//被分解的整數 void
5-37 整數分解為若干項之和
解題思路: 採用了深度優先處理的思想,涉及到了一點點資料結構的知識。如果還沒學到資料結構,也不必擔心。在之前的題目中也可能用到了其它容易實現的資料結構,只是不知道它是資料結構中的內容。資料結構就是把各種各樣的操作、邏輯關係進行分類、總結,從而讓我們更加方便地設計演算法來解決問題。 深度優先演算法用遞迴寫起來
7-37 整數分解為若干項之和
這題完全毫無頭緒,不看網上的答案,我認為我自己是完全寫不出來的。就算看網上的答案看懂了之後,還是覺得這題的程式碼不屬於自己。滿滿都是不安感。 將一個正整數N分解成幾個正整數相加,可以有多種分解
OpenJudge簡單的整數劃分問題兩種方法(DFS)(動態規劃0ms),全域性題號7215,已AC
2:簡單的整數劃分問題 總時間限制: 100ms 記憶體限制: 65536kB描述 將正整數n 表示成一系列正整數之和,n=n1+n2+…+nk, 其中n1>=n2>=…>=n
有一個正整數N可以分解成若干個正整數之和,問如何分解能使這些數的乘積最大?
著作權歸作者所有。 商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。 作者:人子立 連結:https://www.zhihu.com/question/30071017/answer/4758474
USTC機試-將正整數分解成儘可能多的連續整數之和
程式碼如下:#include<stdio.h> #define N 100 int main(){ int n; int j; printf("請輸入您的整數:"); scan
Android項目實戰(三十九):Android集成Unity3D項目(圖文詳解)
jar包沖突 scree pmap module 項目實戰 技術 詳細 應用端 原來 原文:Android項目實戰(三十九):Android集成Unity3D項目(圖文詳解) 需求: Unity3D 一般用於做遊戲 而且是跨平臺的。原本設計是Android 應用端A
java如何簡單的將一個三位正整數分解成三個數
如何 tin info 三位數 new 一個 http tint sys 1 public class Leet { 2 public static void main(String[] args) { 3 Scanner scanner =
求Sn=a+aa+aaa+aaaa+aaaaa的前5項之和(a是一個數字)
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> void main() { int a, i; int b = 0; int Sn = 0; //用來放每次累加的數值
51nod 1383 整數分解為2的冪(數列,也可以自己根據觀察找規律推理得到遞推公式)
描述: 組合數學生成函式 1383 整數分解為2的冪 1 秒 131,072 KB 80 分 5 級題 任何正整數都能分解成2的冪,給定整數N,求N的此類劃分方法的數量!由於方案數量較大,輸出
整數劃分並輸出(DFS)
問題描述:將正整數n表示成一系列正整數之和:n=n1+n2+…+nk,其中n1≥n2≥…≥nk≥1,k≥1。正整數n的這種表示稱為正整數n的劃分。問題1:輸出整數n的所有可能的劃分,如:輸入:6輸出: 5+1 4+2 4+1+1 3