http://rose.u-aizu.ac.jp/onlinejudge/Pr ... 41&lang=jp
送信するとWrong Answerと言われました。
なぜだ!?
Perlで検証
なぜだ!?
ググる
なぜだ!?
...
問題を見直す
アッーーーーーー!!!!!演算子として、加算 (+)、減算 (-)、乗算 (*) だけを使います。除算 (/) は使いません。
これに気付かず、1時間以上格闘していた自分。本当にバカだな...orz
そしてその肝心のコードは総当たり。for文を4重にしている。
なんだこれ。
#include
#define n(a,b) number[zyun[a][b]]
#define e(a) enzansi[enzan[a]]
int calc(int,int,int);
int main(void) {
int zyun[24][4]={
{0,1,2,3},
{0,1,3,2},
{0,2,1,3},
{0,2,3,1},
{0,3,1,2},
{0,3,2,1},
{1,0,2,3},
{1,0,3,2},
{1,2,0,3},
{1,2,3,0},
{1,3,0,2},
{1,3,2,0},
{2,0,1,3},
{2,0,3,1},
{2,1,0,3},
{2,1,3,0},
{2,3,0,1},
{2,3,1,0},
{3,0,1,2},
{3,0,2,1},
{3,1,0,2},
{3,1,2,0},
{3,2,0,1},
{3,2,1,0}
};
char enzansi[3][2]={"+","-","*"};
int number[4];
int order,enzan[3];
while(1) {
scanf("%d %d %d %d",&number[0],&number[1],&number[2],&number[3]);
if(number[0]==0 && number[1]==0 && number[2]==0 && number[3]==0)break;
for(order=0;order<24;order++) {
for(enzan[0]=0;enzan[0]<3;enzan[0]++) {
for(enzan[1]=0;enzan[1]<3;enzan[1]++) {
for(enzan[2]=0;enzan[2]<3;enzan[2]++) {
if(calc(
calc(
calc(n(order,0),n(order,1),enzan[0])
,n(order,2),enzan[1])
,n(order,3),enzan[2])==10) {
printf("(((%d %s %d) %s %d) %s %d)\n",
n(order,0),e(0),n(order,1),
e(1),n(order,2),e(2),n(order,3));
goto out;
}
if(calc(
calc(n(order,0),n(order,1),enzan[0]),
calc(n(order,2),n(order,3),enzan[1]),
enzan[2])==10) {
printf("((%d %s %d) %s (%d %s %d))\n",
n(order,0),e(0),n(order,1),
e(2),n(order,2),e(1),n(order,3));
goto out;
}
if(calc(
calc(n(order,0),
calc(n(order,1),n(order,2),enzan[0]),
enzan[1]),
n(order,3),enzan[2])==10) {
printf("((%d %s (%d %s %d)) %s %d)\n",
n(order,0),e(1),n(order,1),e(0),
n(order,2),e(2),n(order,3));
goto out;
}
if(calc(
n(order,0),
calc(
calc(n(order,1),n(order,2),enzan[0]),
n(order,3),enzan[1]),
enzan[2])==10) {
printf("(%d %s ((%d %s %d) %s %d))\n",
n(order,0),e(2),n(order,1),e(0),
n(order,2),e(1),n(order,3));
goto out;
}
if(calc(
n(order,0),
calc(
n(order,1),
calc(n(order,2),n(order,3),enzan[0]),
enzan[1]),
enzan[2])==10) {
printf("(%d %s (%d %s (%d %s %d)))\n",
n(order,0),e(2),n(order,1),e(1),
n(order,2),e(0),n(order,3));
goto out;
}
}
}
}
}
printf("0\n");
out:;
}
}
int calc(int a,int b,int enzansi) {
switch(enzansi) {
case 0:return a+b;break;
case 1:return a-b;break;
case 2:return a*b;break;
default:
return 0x7fffffff;
break;
}
return 0x7fffffff;
}