NC200003. 雷顿女士与限定魔方阵
描述
输入描述
第一行输入一个T(1<=T<=10)表示数据组数。
接下来T组数据。
对于每组数据,第一行输入a,b,c,d,分别表示上、下、左、右的四个数字。
第二行输入12个数表示石板上的数字,数字各不相同。
保证所有输入的数字x,满足1<=x<=100。
对于所有的数据,保证有且仅有一种方案来解决谜题。
输出描述
对于每组数据,请按顺序输出一行包含,分别表示左上、右上、左下、右下填入石板上面的数字。
请注意行末不要输出多余空格。
示例1
输入:
1 36 52 56 35 3 4 5 6 7 8 9 12 13 14 22 28
输出:
14 22 4 13
C++14(g++5.4) 解法, 执行用时: 4ms, 内存消耗: 356K, 提交时间: 2019-12-07 14:16:39
#include<bits/stdc++.h> using namespace std; int main() { int t,num[13]; cin>>t; while(t--) { int a,b,c,d; cin>>a>>b>>c>>d; for(int i=1;i<=12;i++)cin>>num[i]; for(int i=1;i<=12;i++) { for(int j=1;j<=12;j++) { for(int ii=1;ii<=12;ii++) { for(int jj=1;jj<=12;jj++) { if(i!=j&&i!=ii&&i!=jj&&j!=ii&&j!=jj&&ii!=jj) { if((num[i]*num[j]==a||num[i]+num[j]==a)&&(num[j]*num[jj]==d||num[j]+num[jj]==d)&&(num[ii]*num[jj]==b||num[ii]+num[jj]==b)&&(num[i]*num[ii]==c||num[i]+num[ii]==c)) { cout<<num[i]<<" "<<num[j]<<" "<<num[ii]<<" "<<num[jj]<<endl;break; } } } } } } } return 0; }
C(clang 3.9) 解法, 执行用时: 2ms, 内存消耗: 356K, 提交时间: 2019-12-07 13:42:51
#include<stdio.h> #include<math.h> #include<string.h> int main(){ int T,i,a,b,c,d,g[12],v1,v2,v3,v4,j; scanf("%d",&T); for(i=0;i<T;i++){ scanf("%d %d %d %d",&a,&b,&c,&d); for(j=0;j<12;j++){ scanf("%d",&g[j]); } for(v1=0;v1<12;v1++){ for(v2=0;v2<12;v2++){ for(v3=0;v3<12;v3++){ for(v4=0;v4<12;v4++){ if((g[v1]+g[v2]==a||g[v1]*g[v2]==a)&&(g[v2]+g[v4]==d||g[v2]*g[v4]==d)&&(g[v4]+g[v3]==b||g[v4]*g[v3]==b)&&(g[v1]+g[v3]==c||g[v1]*g[v3]==c)&&(g[v1]!=g[v2])&&g[v1]!=g[v3]&&g[v1]!=g[v4]&&(g[v2]!=g[v3])&&g[v2]!=g[v4]&&(g[v3]!=g[v4])){ printf("%d %d %d %d\n",g[v1],g[v2],g[v3],g[v4]); } } } } } } return 0; }
Python3 解法, 执行用时: 104ms, 内存消耗: 4540K, 提交时间: 2022-04-08 12:24:24
t=int(input()) for _ in range(t): a,b,c,d=map(int,input().split()) ls=list(map(int,input().split())) res=[] for r in range(12): for t in range(12): for y in range(12): for u in range(12): aa=ls[u] bb=ls[y] cc=ls[t] dd=ls[r] if (aa +bb ==a or aa*bb==a) and (cc+dd==b or cc*dd==b) and (aa+cc==c or aa*cc==c) and (bb+dd==d or bb*dd==d): res.append([aa,bb,cc,dd]) for i in res: s=set(i) if len(s) ==4: print(i[0],i[1],i[2],i[3])
C++11(clang++ 3.9) 解法, 执行用时: 4ms, 内存消耗: 344K, 提交时间: 2020-06-20 18:49:11
#include<bits/stdc++.h> #define ll long long using namespace std; int main() { int t,e,b,c,d,a[12],i,j,k,l; cin>>t; while(t--) { cin>>e>>b>>c>>d; for(i=0;i<12;i++) cin>>a[i]; for(i=0;i<12;i++) { for(j=0;j<12;j++) { for(k=0;k<12;k++) { for(l=0;l<12;l++) { if(i!=j&&i!=k&&i!=l&&j!=k&&j!=l&&k!=l) { if((a[i]+a[j]==e||a[i]*a[j]==e)&&(a[k]+a[l]==b||a[k]*a[l]==b)&&(a[i]+a[k]==c||a[i]*a[k]==c)&&(a[l]+a[j]==d||a[l]*a[j]==d)) cout<<a[i]<<" "<<a[j]<<" "<<a[k]<<" "<<a[l]<<endl; } } } } } } }