XM29. 扑克牌四则运算
描述
现在有一幅扑克牌,去掉大小王52张牌。随机选出4张牌,可以任意改变扑克牌的顺序,并填入 + - * / 四个运算符,不用考虑括号,除法按整数操作,计算过程中没有浮点数,问是否能够求值得到给定的数m。输入描述
一行四个数字 (JQK 分别被替换成11,12,13)单空格分割,另一行输入 m输出描述
可以输出1示例1
输入:
13 13 13 13 24
输出:
0
C 解法, 执行用时: 2ms, 内存消耗: 380KB, 提交时间: 2020-05-20
#include <stdio.h> int f(int x,int y,int a) { if(a==1) return x+y; else if(a==2) return x-y; else if(a==3) return x*y; else if(a==4&&y!=0) return x/y; else if(a==4&&y==0) return 100000; } int main() { int a,b,c,d,m; while(scanf("%d %d %d %d",&a,&b,&c,&d)!=EOF) { int num[5]; int flag=0; scanf("%d",&m); num[1]=a;num[2]=b;num[3]=c;num[4]=d; for(int i1=1;i1<5;i1++) { for(int i2=1;i2<5;i2++) { for(int i3=1;i3<5;i3++) { for(int i4=1;i4<5;i4++) { if(i1!=i2 && i1!=i3 && i1!=i4 && i2!=i3 && i2!=i4 && i3!=i4) { for(int s1=1;s1<5;s1++) for(int s2=1;s2<5;s2++) for(int s3=1;s3<5;s3++) { if(f(f(f(num[i1],num[i2],s1),num[i3],s2),num[i4],s3)==m ||f(f(f(num[i1],num[i2],s1),num[i3],s2),num[i4],s3)==-m) { flag=1; break; } else if(f(f(num[i1],num[i2],s1),f(num[i3],num[i4],s2),s3)==m ||f(f(num[i1],num[i2],s1),f(num[i3],num[i4],s2),s3)==-m) { flag=1; break; } if(flag==1) break; } if(flag==1) break; } if(flag==1) break; } if(flag==1) break; } if(flag==1) break; }if(flag==1) break; } if(flag==0) printf("0"); else if(flag==1) printf("1"); } }
C 解法, 执行用时: 2ms, 内存消耗: 484KB, 提交时间: 2020-07-11
#include <stdio.h> int f(int x,int y,int a) { if(a==1) return x+y; else if(a==2) return x-y; else if(a==3) return x*y; else if(a==4&&y!=0) return x/y; else if(a==4&&y==0) return 100000; } int main() { int a,b,c,d,m; int num[5]; scanf("%d %d %d %d",&num[1],&num[2],&num[3],&num[4]); int flag=0; scanf("%d",&m); for(int i1=1;i1<5;i1++){ for(int i2=1;i2<5;i2++){ for(int i3=1;i3<5;i3++){ for(int i4=1;i4<5;i4++){ if(i1!=i2 && i1!=i3 && i1!=i4 && i2!=i3 && i2!=i4 && i3!=i4){ for(int s1=1;s1<5;s1++) for(int s2=1;s2<5;s2++) for(int s3=1;s3<5;s3++){ if(f(f(f(num[i1],num[i2],s1),num[i3],s2),num[i4],s3)==m ||f(f(f(num[i1],num[i2],s1),num[i3],s2),num[i4],s3)==-m){ flag=1; break; } else if(f(f(num[i1],num[i2],s1),f(num[i3],num[i4],s2),s3)==m ||f(f(num[i1],num[i2],s1),f(num[i3],num[i4],s2),s3)==-m){ flag=1; break; } if(flag==1) break; } if(flag==1) break; } if(flag==1) break; } if(flag==1) break; } if(flag==1) break; }if(flag==1) break; } if(flag==0) printf("0"); else if(flag==1) printf("1"); }