From g97p0807@mse.waseda.ac.jp Mon May 10 17:49:04 1999 Received: from wise13.mn.waseda.ac.jp (wise13.mn.waseda.ac.jp [133.9.4.145]) by newton.kashi.info.waseda.ac.jp (8.8.8/3.7W) with ESMTP id RAA26330 for ; Mon, 10 May 1999 17:49:04 +0900 (JST) Received: from wise20.mn.waseda.ac.jp (wise20.mn.waseda.ac.jp [133.9.4.141]) by wise13.mn.waseda.ac.jp (8.9.1a/3.7W-19980811) with ESMTP id RAA08866 for ; Mon, 10 May 1999 17:38:08 +0900 (JST) Received: from wise19.mn.waseda.ac.jp (wise19.mn.waseda.ac.jp [133.9.4.137]) by wise20.mn.waseda.ac.jp (8.9.1+3.0W/3.7W-19981111) with ESMTP id RAA21198 for ; Mon, 10 May 1999 17:38:08 +0900 (JST) Received: from pandora.mse.waseda.ac.jp (root@pandora.mse.waseda.ac.jp [133.9.5.9]) by wise19.mn.waseda.ac.jp (8.9.1a/3.7W-19980811) with ESMTP id RAA27768 for ; Mon, 10 May 1999 17:38:08 +0900 (JST) Received: from localhost (g97p0807@muse04.mse.waseda.ac.jp [133.9.5.36]) by pandora.mse.waseda.ac.jp (8.9.1+3.0W/3.7W) with ESMTP id RAA04151 for ; Mon, 10 May 1999 17:38:07 +0900 (JST) Message-Id: <199905100838.RAA04151@pandora.mse.waseda.ac.jp> To: kashi@mn.waseda.ac.jp Subject: [JSJ] 4/23 report Date: Mon, 10 May 1999 17:38:05 +0900 From: FUKUSHIMA YUKIKO Status: OR とりあえず暫定版が出来たので提出します。 「暫定版」と言う通り、このプログラムには 1)変数の計算は全てint型変数で行なわれているため 除算が正確ではない 2)今のところ原因が良く分からないのだが、入力したはず のない 47 と言う数字が何故か出てきてしまう (47は「/」の文字コードなので除算の部分が原因かと思 われるのだが) という問題点があります。期限まではもうちょっとあるのでま だ考えてみるつもりです。 -------- #include int N[4]; /* 数値を入れておく配列 */ int S[3]; /* 演算記号を入れておく配列 */ void print(void); void make10(int i,int t); void perm(int i); int main(void); /* 数式を出力する */ void print(void) { printf("((%d %c %d)%c %d)%c %d\n",N[0],S[0],N[1],S[1],N[2],S[2],N[3]); return; } /* 10を作る試行。再帰的 */ void make10(int i,int t) { /* iが呼びだし回数,3回目の呼び出しで * * かつ計算結果が10なら出力 */ /* 加算をトライ */ S[i-1]='+'; t=t+N[i]; if(i<3){make10(i+1,t);}else{if(t==10) print();} t=t-N[i]; /* 減算をトライ */ S[i-1]='-'; t=t-N[i]; if(i<3){make10(i+1,t);}else{if(t==10) print();} t=t+N[i]; /* 乗算をトライ */ S[i-1]='*'; t=t*N[i]; if(i<3){make10(i+1,t);}else{if(t==10) print();} t=t/N[i]; /* 除算をトライ */ S[i-1]='/'; t=t/N[i]; if(i<3){make10(i+1,t);}else{if(t==10) print();} t=t*N[i]; return; } /* 順列による並べかえ。再帰的 */ void perm(int i) { int t,j; if(i==0) make10(1,N[0]); /* 並べ終ったら四則演算の試行 */ else{ perm(i-1); for(j=i-1;j>=0;j--){ t=N[i]; N[i]=N[j]; N[j]=t; perm(i-1); t=N[i]; N[i]=N[j]; N[j]=t; } } return; } int main(void) { int i; /* 4つの数字を入力 */ printf("Input 4 numbers! \n"); for(i=0;i<4;i++){ printf("%d banme =? ",i+1); scanf("%d",&N[i]); } /* 並べかえて四則演算を行なう */ perm(4); return 0; } -------- ################################ # # # 福嶋 有希子 # # g97p0807@mse.waseda.ac.jp # # 早稲田大学理工学部情報学科 # # # ################################