编程之美1.16――24点游戏(二)

2014-11-24 11:53:46 · 作者: · 浏览: 12
for (int j=i+1; j {
times++;
// 保存状态(操作数i,j)
a = A[i];
b = A[j];
expa = res_str[i];
expb = res_str[j];

// 改变状态
A[j] = A[n-1];
res_str[j] = res_str[n-1];
A[i] = a+b;
res_str[i] = '(' + expa + '+' + expb + ')';
if (process(n-1))
return true;
A[i] = a-b;
res_str[i] = '(' + expa + '-' + expb + ')';
if (process(n-1))
return true;
A[i] = b-a;
res_str[i] = '(' + expb + '-' + expa + ')';
if (process(n-1))
return true;
A[i] = a*b;
res_str[i] = '(' + expa + '*' + expb + ')';
if (process(n-1))
return true;
if (b!=0)
{
A[i] = a/b;
res_str[i] = '(' + expa + '/' + expb + ')';
if (process(n-1))
return true;
}
if (a!=0)
{
A[i] = b/a;
res_str[i] = '(' + expb + '/' + expa + ')';
if (process(n-1))
return true;
}

// 恢复状态
A[i] = a;
A[j] = b;
res_str[i] = expa;
res_str[j] = expb;
}
return false;
}


int main()
{
for (int i=0; i {
cin >> A[i];
char c[10];
sprintf(c,"%.0f",A[i]);
res_str[i] = c;
}
clock_t start = clock();
if (process(NUM))
cout << res_str[0] << endl;
else
cout << "failed" << endl;
clock_t duration = clock() - start;
cout << duration << endl;
}



[cpp]


作者:linyunzju