我正在尝试编写一个程序,通过蛮力解决一个问题。
问题取决于数组n中的数字(在本例中为1,2,3,4)。我想对这些数字进行某种数学运算,得到10的值。
所以在这个例子中,使用数字1 2 3 4将是1 + 2 + 3 + 4 = 10
在编写程序时,我不太确定如何实际检查我可以对数字执行的所有不同操作。我尝试定义操作,将每个值存储到一个数组中,然后遍历数组以找到解决方案。不幸的是,这不起作用;(
这是我的代码,我已经评论了我遇到的问题。
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#define A +
#define B -
#define C *
#define D /
int main(void)
{
char ops[3]; //Array to contain the different functions
ops[0] = 'A';
ops[1] = 'B';
ops[2] = 'C';
ops[3] = 'D';
int n[3]; //Array containing the numbers which I'm trying to solve
for(i = 0; i <= 3; i++)
{
n[i] = i;
}
int solution[2]; //Array which will keep track of the solution
for(i = 0; i < 3; i++)
{
solution[i] = 0;
}
while(solution[2] <= 3)
{
while(solution[1] <= 3)
{
while(solution[0] <= 3)
{
//TROUBLE
//Here I'm going to test it
//Was trying to do something like
n[0] ops[solution[0]] n[1] etc. which should become 1 + 2 except it doesn't :/
}
}
}
sleep(5000);
return 0;
}
那么,我将如何在某种数组中存储操作并调用它们?
答案 0 :(得分:0)
你想写一个功能来完成这个。在编译整个程序之前处理宏,因此它不能用于仅在运行时已知的内容。
试试这个:
int solveOP(int op1, int op2, char op)
{
switch (op)
{
case 'A': // or you can use '+' directly
return op1+op2;
case 'B':
return op1-op2;
// ...
default: // when we've check all possible input
// ERROR!
// put your own error handling code here.
}
}
当你需要使用它而不是n[0] ops[solution[0]] n[1]
时,你会说:
solveOP(n[0], n[1], ops[solution[0]]);
答案 1 :(得分:0)
使用像这样的开关语句:
switch(op)
{
case 'A':
val = a + b;
break;
case 'B':
val = a - b;
break;
case 'C':
val = a * b;
break;
....
}
答案 2 :(得分:0)
你正在寻找功能指针;你可以逃避这样的事情:
typedef int (*op)(int, int);
#define opfunc(op, name) \
void name(int a, int b){ return a op b; }
opfunc(+, plus)
opfunc(-, minus)
opfunc(/, div)
opfunc(*, times)
op ops[] = { plus, minus, times, div };
int main()
{
//...etc, your code...
int result = ops[x](something, somethingelse);
// ...more code
}