2018北郵網研機試-C
阿新 • • 發佈:2018-12-08
C簡單的24點
輸入為4個數字,a,b,c,d。若a^b^c^d=24,則稱該陣列滿足24點,其中^可以為+、-、*、/任一個,若不能得到結果24,則稱該陣列不滿足24點。(計算為實型)
輸入:
第一行為測試組數t
接下來t行,每一行為四個整數a,b,c,d,測試是否滿足24點
1<=a,b,c,d<10000(右區間忘了,反正四個數不為0)
輸出
在每一行
若滿足,輸出YES
不滿足,輸出NO
#include "stdio.h" float sum=0,sum1=0; void cul(float a,float b,int x) { if(x==1) { sum = (a+b)/1.0; } else if(x==2) { sum =(a-b)/1.0; } else if(x==4&&b!=0) { sum =(a/b)/1.0; } else sum =(a*b)/1.0; } int judge(int x) { if(x==1||x==2) return 1; else return 2; } int main() { float a,b,c,d; int t; bool state=false; scanf("%d",&t); while(t--) { scanf("%f%f%f%f",&a,&b,&c,&d); state = false; for(int i=1;i<=4;i++) { for(int j=1;j<=4;j++) { for(int k=1;k<=4;k++) { int x=judge(i); int y=judge(j); int z=judge(k); if(x==y&y==z||x==y&y>z||x>y&y==z)//111 222 211 221 //從左到右 { cul(a,b,i); cul(sum,c,j); cul(sum,d,k); } else if(x==y&y<z)//112 { cul(c,d,k); cul(b,sum,j); cul(a,sum,i); } else if(x<y&y==z)//122 { cul(b,c,j); cul(sum,d,k); cul(a,sum,i); } else if(x==z&&y<z)//212 { cul(a,b,i); sum1=sum; cul(c,d,k); cul(sum1,sum,j); } else if(x==z&y>z)//121 { cul(b,c,j); cul(a,sum,i); cul(sum,d,k); } if(sum==24.0) { state=true; break; } } } } if(state == true) printf("YES\n"); else printf("NO\n"); } return 0; }
此為回憶版,如有錯,歡迎糾錯。謝謝