柚子快報激活碼778899分享:算法 數(shù)據(jù)結(jié)構(gòu) 分解整數(shù)
http://yzkb.51969.com/
題目描述
給定一個正整數(shù) N,然后將 N 分解成 3 個正整數(shù)之和。計算出共有多少種符合要求的分解方法。要求:
1)分解的 3 個正整數(shù)各不相同;
2)分解的 3 個正整數(shù)中都不含數(shù)字 3 和 7。如:N 為 8,可分解為(1,1,6)、(1,2,5)、(1,3,4)、(2,2,4)、(2,3,3),其中滿足要求的分解方法有 1 種,為(1,2,5)。
輸入格式
輸入一個正整數(shù) N (5 < N < 501),表示需要分解的正整數(shù)。
輸出格式
輸出一個整數(shù),表示共有多少種符合要求的分解方法。
輸入樣例
輸入數(shù)據(jù) 1
8
Copy
輸出數(shù)據(jù) 1
1
代碼編輯
這次的代碼還是有一定難度的,暴力一點,多做幾個函數(shù)就行了
#include using namespace std; struct quchong{ ? ? int a=0; ? ? int b=0; ? ? int c=0; }; quchong x[100001]; bool ts(int a,int b,int c){ ? ? while(a){ ? ? ? ? if(a%10==3 || a%10==7){ ? ? ? ? ? ? return false; ? ? ? ? } ? ? ? ? a/=10; ? ? } ? ? ?while(b){ ? ? ? ? if(b%10==3 || b%10==7){ ? ? ? ? ? ? return false; ? ? ? ? } ? ? ? ? b/=10; ? ? } ? ? ?while(c){ ? ? ? ? if(c%10==3 || c%10==7){ ? ? ? ? ? ? return false; ? ? ? ? } ? ? ? ? c/=10; ? ? } ? ? return true; } bool qc(int a,int b,int c){ ? ? if(a==b || a==c || b==c){ ? ? ? ? return false; ? ? } ? ? return true; } bool qc2(int e,int f,int g,quchong y[],int cn){ ?? ?for(int i=0;i<=cn;i++){ ? ? if((e==y[i].a || e==y[i].b || e==y[i].c) && (f==y[i].a || f==y[i].b || f==y[i].c) && (g==y[i].a || g==y[i].b || g==y[i].c)){ ? ? ? ? return false; ? ? } } ? ? return true; } int ans(int n){ ? ? int cnt=1; ? ? for(int i=1;i<=n;i++){ ? ? ? ? for(int j=1;j<=n;j++){ ? ? ? ? ? ? for(int k=1;k<=n;k++){ ? ? ? ? ? ? ? ? if(i+j+k==n && ts(i,j,k) && qc(i,j,k)&& qc2(i,j,k,x,cnt)){ ? ? ? ? ? ? ? ? ? ?x[cnt].a=i; ? ? ? ? ? ? ? ? ? ?x[cnt].b=j; ? ? ? ? ? ? ? ? ? ?x[cnt].c=k; ? ? ? ? ? ? ? ? ? ? cnt++; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? } ? ? } ? ?return cnt-1; } int main(){ ? ? int n; ? ? cin>>n; ? ?cout<< ans(n); }
柚子快報激活碼778899分享:算法 數(shù)據(jù)結(jié)構(gòu) 分解整數(shù)
http://yzkb.51969.com/
參考文章