算24(4个数不改变顺序,运算次序确定能否得到24)
时限:1000ms 内存限制:10000K 总时限:3000ms
描述:
输入4个1~13的整数,不改变顺序,且运算次序为先做第一个运算,再做第二个运算,最后做第三个运算,即(((a ? b) ? c) ? d), 能否得到24。
输入:
输入4个1~13的整数。
输出:
不改变4个整数的顺序,且运算次序为先做第一个运算,再做第二个运算,最后做第三个运算的情况下,能否得到24。
如果能则输出“Yes”,否则输出“No”。
输入样例:
1 5 4 1
输出样例:
Yes
#include<iostream>
using namespace std;
void init(); int calc(int n); int x,y; int a[4];
int main() { int i,j,k,l,m; int b[3];
init();
for(l=0;l<3;l++) { x=a[l]; y=a[l+1]; for(m=0;m<3;m++) { b[l]=calc(m); int z=b[l]; b[(l+1)%3]=a[(l+2)%4]; b[(l+2)%3]=a[(l+3)%4]; for(i=0;i<2;i++) { x=b[i]; y=b[i+1]; for(j=0;j<3;j++) { x=calc(j); y=b[(i+2)%3]; for(k=0;k<3;k++) { if(calc(k)==24) { cout<<"Yes"<<endl; return 0; } } x=b[i]; y=b[i+1]; } x=a[l]; y=a[l+1]; } } } cout<<"No"<<endl; return 0; }
int calc(int n) { if(n==0) { return(x+y); } else if(n==1) { return(x-y); } else if(n==2) { return(x*y); } }
void init() { int i;
for(i=0;i<4;i++) { cin>>a[i]; } }