四個整數的加減乘除(遞迴或列舉)

2021-07-07 11:08:47 字數 1804 閱讀 6673

第一行輸入乙個整數t,表示有t組測試資料。 每組資料,輸入四個整數,a,b,c,d。其中0 <= a,b,c,d <= 1000.

對於每組測試資料,按題意輸出yes或者no。

2 1 2 3 6

2 2 3 9

yes no

思路清晰,但實現過程對我來說費勁。

自己的**如下,提交了不下20次,最終還是機緣巧合之下憑藉輸錯資料得出錯誤的答案而分析修改程式最終ac。

next_permutation()

列舉**如下:

#include 

#include

#include

using namespace std;

int main()

tmp=(a[0]+a[1])-a[2];

if(a[3]==tmp) p=1;

if(p==1)

tmp=(a[0]+a[1])*a[2];

if(a[3]==tmp) p=1;

if(p==1)

for(int i=0;i<1;i++)

if(p==1)

tmp=(a[0]-a[1])+a[2];

if(a[3]==tmp) p=1;

if(p==1)

tmp=(a[0]-a[1])-a[2];

if(a[3]==tmp) p=1;

if(p==1)

tmp=(a[0]-a[1])*a[2];

if(a[3]==tmp) p=1;

if(p==1)

for(int i=0;i<1;i++)

if(p==1)

tmp=(a[0]*a[1])+a[2];

if(a[3]==tmp) p=1;

if(p==1)

tmp=(a[0]*a[1])-a[2];

if(a[3]==tmp) p=1;

if(p==1)

tmp=(a[0]*a[1])*a[2];

if(a[3]==tmp) p=1;

if(p==1)

for(int i=0;i<1;i++)

if(p==1)

for(int i=0;i<1;i++)

if(p==1)

for(int i=0;i<1;i++)

if(p==1)

for(int i=0;i<1;i++)

if(p==1)

for(int i=0;i<1;i++)

if(p==1)

flag=0;

}while(next_permutation(a,a+4));

if(flag==0) cout<<"no";

if(t>0) cout<

遞迴**如下:

#include 

#include

#include

#include

using namespace std;

double a[50];

int ok;

void dfs(int step,double ans)

for(int i=0;i<4;++i)

}int main()while(next_permutation(a,a+4)); //按字典序排列陣列。

puts(ok?"yes":"no");

} return 0;

}

部落格已搬:

洪學林部落格

對兩個整數進行加 減 乘 除

include int add int a,int b int sub int a,int b int mul int a,int b int div int a,int b void result int p int a,int b 使用函式的指標p作為result函式的形參 main int i...

大整數的加減乘除求餘

include include define n 50 n是計算的位數 class integer 大整數類 過載建構函式 友元函式實現運算子過載 friend integer operator integer integer friend integer operator integer int ...

大整數的加減乘除取模

include include using namespace std inline int compare string str1,string str2 高精度加法 string add int string str1,string str2 else else else int int1 0,...