小学数学题一则1…9=100
1 2 3 4 5 6 7 8 9=100 填入+=*/使得结果=100 不用括号
好像没有特别好的通用解法,编程穷举了一下
int Algorithm_100()
{
int i,j,n,nRet=0;
float fnum[32],fres;
TCHAR szOperate[]="+-x/",szOper[10]={0},szText[256]={0};
for(i=0; i<65536; i++)//8个运算符,4种可能,8的4次方=65536
{
n = 0;
fnum[0] = 1;
for(j=0; j<8; j++)
{
szOper[j] = szOperate[(i>>(j*2))&3];
if(szOper[j] == 'x')
{
fnum[n] *= (j+2);
} else if(szOper[j] == '/') // /
{
fnum[n] /= (j+2);
} else // + -
{
fnum[++n] = szOper[j];
fnum[++n] = j+2;
}
}
fres = fnum[0];
// cac result
for(j=1; j<n; j+=2)
{
if(fnum[j] == '+') //+
fres += fnum[j+1];
else
fres -= fnum[j+1];
}
if(fres == 100)
{
for(j=0; j<9; j++)
{
szText[j*2+0] = '1'+j;
szText[j*2+1] = szOper[j];
}
TRACE(szText);// 输出结果
nRet++;
}
}
return nRet;
}
结果如下:
1x2x3x4+5+6+7x8+9
1-2+3x4x5+6x7+8-9
1-2+3x4x5-6+7x8-9
1+2+3+4+5+6+7+8x9 最容易想到的一个
1x2x3+4+5+6+7+8x9
1-2x3+4x5+6+7+8x9
1+2x3+4x5-6+7+8x9
1-2x3-4+5x6+7+8x9
1+2-3x4+5x6+7+8x9
1+2x3x4x5/6+7+8x9
1x2x3x4+5+6-7+8x9
1-2x3-4-5+6x7+8x9
1+2-3x4-5+6x7+8x9
1+2+3-4x5+6x7+8x9
1x2x3-4x5+6x7+8x9