みけCATのにっき(仮)
つれづれなるまゝに、日くらし、PCにむかひて、心に移りゆくよしなし事を、そこはかとなく書きつくれば、あやしうこそものぐるほしけれ。
(本当か!?)
出典

努力はいたづらになりにけり

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

努力はいたづらになりにけり

投稿記事 by みけCAT » 14年前

会津オンラインジャッジの0041番をやっていました。
http://rose.u-aizu.ac.jp/onlinejudge/Pr ... 41&lang=jp
送信するとWrong Answerと言われました。
なぜだ!?
Perlで検証
なぜだ!?
ググる
なぜだ!?

...

問題を見直す
演算子として、加算 (+)、減算 (-)、乗算 (*) だけを使います。除算 (/) は使いません。
アッーーーーーー!!!!!

これに気付かず、1時間以上格闘していた自分。本当にバカだな...orz

そしてその肝心のコードは総当たり。for文を4重にしている。
なんだこれ。

CODE:

#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;
}
最後に編集したユーザー みけCAT on 2010年12月14日(火) 18:32 [ 編集 1 回目 ]
理由: カテゴリをつけ忘れていたため、追加

アバター
Gu-dara
記事: 23
登録日時: 15年前

Re: 努力はいたづらになりにけり

投稿記事 by Gu-dara » 14年前

○ 自分は1時間かかってもとうてい気づきませんw
に丸です(笑