定义值并通过数组调用它们

时间:2011-12-12 01:06:14

标签: c++ c

我正在尝试编写一个程序,通过蛮力解决一个问题。

问题取决于数组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;
}

那么,我将如何在某种数组中存储操作并调用它们?

3 个答案:

答案 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
}