Q7 9□4□6□2=4
□の中に+、−、×、÷のどれかの記号を入れて、式を作りなさい。
実際は、EZFUNC のソースを使いましたが、古いソースでちょっと改造が必要で、説明が大変なので、下記の関数電卓の C ソースを使わせていただきました。 main を「#if 0 〜 #endif」で無効化するだけで使えます。ただし、point とか answer とか expr をグローバル変数に使っているので、衝突しないように注意が必要です。(^_^;
コンパイルは、「Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland」を使いました。警告が出ますが大丈夫です。気になる場合は、_calc.c の double getValue(void) 関数の strlen(expr) を 2 か所 (int)strlen(expr) のようにキャストしてください。
/* * Quiz_07.c */ #include <stdio.h> /* 参考URLの calc.c の main を #if 0 〜 #endif で無効化したソース */ #include "_calc.c" /* _calc.c を使いやすくするための関数 */ double Evaluate(char *src) { point = 0; strcpy(expr,src); return(getValue()); } int main(void) { double res; char buf[32], opr[8]="+-*/"; /* 少し多めに余裕をもって */ int i,j,k; for(i=0; i<4; i++){ for(j=0; j<4; j++){ for(k=0; k<4; k++){ sprintf(buf,"9%c4%c6%c2",opr[i],opr[j],opr[k]); printf("%s=% .16g",buf,res=Evaluate(buf)); if(res==4.0) printf(" <----- Hit!\n"); else printf("\n"); } } } return(0); }
●出力結果
9+4+6+2= 21
9+4+6-2= 17
9+4+6*2= 25
9+4+6/2= 16
9+4-6+2= 9
9+4-6-2= 5
9+4-6*2= 1
9+4-6/2= 10
9+4*6+2= 35
9+4*6-2= 31
9+4*6*2= 57
9+4*6/2= 21
9+4/6+2= 11.66666666666667
9+4/6-2= 7.666666666666666
9+4/6*2= 10.33333333333333
9+4/6/2= 9.333333333333334
9-4+6+2= 13
9-4+6-2= 9
9-4+6*2= 17
9-4+6/2= 8
9-4-6+2= 1
9-4-6-2=-3
9-4-6*2=-7
9-4-6/2= 2
9-4*6+2=-13
9-4*6-2=-17
9-4*6*2=-39
9-4*6/2=-3
9-4/6+2= 10.33333333333333
9-4/6-2= 6.333333333333334
9-4/6*2= 7.666666666666667
9-4/6/2= 8.666666666666666
9*4+6+2= 44
9*4+6-2= 40
9*4+6*2= 48
9*4+6/2= 39
9*4-6+2= 32
9*4-6-2= 28
9*4-6*2= 24
9*4-6/2= 33
9*4*6+2= 218
9*4*6-2= 214
9*4*6*2= 432
9*4*6/2= 108
9*4/6+2= 8
9*4/6-2= 4 <----- Hit!
9*4/6*2= 12
9*4/6/2= 3
9/4+6+2= 10.25
9/4+6-2= 6.25
9/4+6*2= 14.25
9/4+6/2= 5.25
9/4-6+2=-1.75
9/4-6-2=-5.75
9/4-6*2=-9.75
9/4-6/2=-0.75
9/4*6+2= 15.5
9/4*6-2= 11.5
9/4*6*2= 27
9/4*6/2= 6.75
9/4/6+2= 2.375
9/4/6-2=-1.625
9/4/6*2= 0.75
9/4/6/2= 0.1875
※参考URL
●関数電卓のマニュアル及びソースファイル
●EZFUNC
P.S.
使用した関数電卓のソース calc.c がリンク切れになっているようなので、EZFUNC のソースを使って Evaluate 関数等を書き直してみました。(^_^;
●ちょっと前のクイズ(3)