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)
{
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