这个程序的每一步到底是为啥呢,我想知道每一步的缘由
帮我看看这个程序每一步的缘由,谢谢#include <stdio.h>
#include <string.h>
#include <algorithm>
#define OP(o) do { a[1].n = a[0].n o a[1].n; \
sprintf(a[1].s, "(%s"#o"%s)", a[0].s, strcpy(t.s, a[1].s)); \
if (dfs(n - 1, a + 1, r)) return 1; \
a[1] = temp; } while (0)
struct data {
double n;
char s[90];
}num[4], t;
int dfs(int n, data a[], double r) {
int i, j;
if (n == 1)
if (a[0].n - r > 1e-8 || a[0].n - r < -1e-8)
return 0;
else return 1;
for (i = 0; i < n; ++i) {
std::swap(a, a[0]);
for (j = 1; j < n; ++j) {
std::swap(a[j], a[1]);
data temp = a[1];
OP(+);
OP(-);
OP(*);
if (a[1].n > 1e-8 || a[1].n < -1e-8)
OP(/);
std::swap(a[j], a[1]);
}
std::swap(a, a[0]);
}
return 0;
}
int main() {
for (int r = 24; ; ) {
for (int i = 0; i < 4; ++i) {
scanf("%s", num.s);
sscanf(num.s, "%lf", &num.n);
}
if (dfs(4, num, r))
printf("%s = %d\n", num[3].s, r);
else
printf("No answer\n");
}
return 0;
}