数学加暴力啦。。。
本来蛮简单个题,由于自己写成死循环(if。。。else 一多,continue,break一多。。。。
标记变量一多 就失去控制,比赛的时候没检查出来)
题目链接:点击打开链接
#include<cstdio>
#include<iostream>
#include<cctype>
#include<cstdlib>
#include<cstring>
#include<string>
#include<algorithm>
#include<queue>
#include<cmath>
#define INF 0x3f3f3f3f
using namespace std;
int main()
{
int r1,r2,c1,c2,d1,d2,x1,x2,x3,x4;
while(scanf("%d%d%d%d%d%d",&r1,&r2,&c1,&c2,&d1,&d2)!=EOF)
{
int flag=0;
if((r1+r2)!=(c1+c2) || (r1+r2)!=(d1+d2) ||(c1+c2)!=(d1+d2))
{
printf("-1\n");
continue;
}
for(x1=1;x1<r1 && x1<=9;x1++)
{
x2=r1-x1;
//cout<<x1<<' '<<x2<<endl;
if(x2>9)
continue;
if(x1==x2)
continue;
for(x3=1;x3<r2 && x3<=9;x3++)
{
x4=r2-x3;
if(x4>9) continue;
if(x3==x4 ||x2==x4||x1==x4||x3==x1 ||x3==x2 ) continue;
//cout<<x1<<' '<<x2<<' '<<x3<<' '<<x4<<endl;
if(x1+x4==d1 && x1+x3==c1 && x2+x4==c2 && x2+x3==d2 )
{
printf("%d %d\n%d %d\n",x1,x2,x3,x4);
flag=1;
break;
}
}
if(flag) break;
}
if(!flag) printf("-1\n");
}
return 0;
}
/*
12 17
10 19
13 16
*/
另外一种略改:
与错误代码对比就加了个输出-1的语句,不然标记变量改了后break跳出循环了
没有输出。
正确代码:
#include<cstdio>
#include<iostream>
#include<cctype>
#include<cstdlib>
#include<cstring>
#include<string>
#include<algorithm>
#include<queue>
#include<cmath>
#define INF 0x3f3f3f3f
using namespace std;
int main()
{
int r1,r2,c1,c2,d1,d2,x1,x2,x3,x4;
while(scanf("%d%d%d%d%d%d",&r1,&r2,&c1,&c2,&d1,&d2)!=EOF)
{
int flag=0;
if((r1+r2)!=(c1+c2) || (r1+r2)!=(d1+d2) ||(c1+c2)!=(d1+d2))
{
printf("-1\n");
continue;
}
for(int x1=1;x1<r1;x1++)
{
if(x1>9)
{
printf("-1\n");
flag=1;
break;
}
x2=r1-x1;
if(x2>9)
continue;
if(x1==x2)
continue;
for(int x3=1;x3<r2;x3++)
{
if(x3>9) break;
x4=r2-x3;
if(x4>9) continue;
if(x3==x4 ||x1==x3 ||x2==x3||x2==x4||x1==x4) continue;
if(x1+x4==d1 && x1+x3==c1 && x2+x4==c2 && x2+x3==d2 )
{
printf("%d %d\n%d %d\n",x1,x2,x3,x4);
flag=1;
break;
}
}
if(flag) break;
}
if(!flag) printf("-1\n");
}
return 0;
}
第6组没有输出的代码:
#include<cstdio>
#include<iostream>
#include<cctype>
#include<cstdlib>
#include<cstring>
#include<string>
#include<algorithm>
#include<queue>
#include<cmath>
#define INF 0x3f3f3f3f
using namespace std;
int main()
{
int r1,r2,c1,c2,d1,d2,x1,x2,x3,x4;
while(scanf("%d%d%d%d%d%d",&r1,&r2,&c1,&c2,&d1,&d2)!=EOF)
{
int flag=0;
if((r1+r2)!=(c1+c2) || (r1+r2)!=(d1+d2) ||(c1+c2)!=(d1+d2))
{
printf("-1\n");
continue;
}
for(int x1=1;x1<r1;x1++)
{
if(x1>9)
{
flag=1;
break; //这里跳出时flag=1.跳出到2处
}
x2=r1-x1;
if(x2>9)
continue;
if(x1==x2)
continue;
for(int x3=1;x3<r2;x3++)
{
if(x3>9) break;
x4=r2-x3;
if(x4>9) continue;
if(x3==x4 ||x1==x3 ||x2==x3||x2==x4||x1==x4) continue;
if(x1+x4==d1 && x1+x3==c1 && x2+x4==c2 && x2+x3==d2 )
{
printf("%d %d\n%d %d\n",x1,x2,x3,x4);
flag=1;
break;
}
}
if(flag) break;
}
if(!flag) printf("-1\n"); //2处。。。只有flag==0才输出-1
}
return 0;
}
汲取教训啊同志。。。。
不能继续渣下去!!!!!!
注意培养自己查错的能力,快速差错的能力~~~~~