ちょっと前のクイズ(2)

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)