编程之美之24点游戏

来源:互联网 发布:java自动化运维 编辑:程序博客网 时间:2024/04/28 07:02

关于编程之美24点游戏的求解:

思想很简单,把array[i]和array[i+1]求加减乘除等运算,然后将值写入array[i+1],不难发现是一个递归子过程,代码不难写,如下:

#include <iostream>#include <sstream>using namespace std;int array[] = {1, 2, 3, 4};string arrayStr[] = {"1", "2", "3", "4"};const int size = sizeof array / sizeof *array;int cac24(int *array, string *arrayStr, const int size, int pos){stringstream ss;if (array == NULL || arrayStr == NULL || size <= 0 || pos == size)return -1;if (pos == size - 1){if (array[pos] == 24)return 0;elsereturn -1;}for (int i = pos; i < size - 1; i++){for (int j = i + 1; j < size; j++){int value1 = array[i];int value2 = array[j];string str1 = arrayStr[i];string str2 = arrayStr[j];int addValue = array[i] + array[j];int mulValue = array[i] * array[j];int mnsValue = array[i] - array[j];int mnsValue2 = array[j] - array[i];int divValue = -1;int divValue2 = -1;if (array[j] != 0)divValue = array[i] / array[j];if (array[i] != 0)divValue2 = array[j] / array[i];int tempValue = array[j];string tempStr = arrayStr[j];ss.str("");array[j] = addValue;ss << '(' << arrayStr[i] << '+' << tempStr << ')';arrayStr[j] = ss.str();if (cac24(array, arrayStr, size, pos + 1) == 0){return 0;}ss.str("");array[j] = mnsValue;ss << '(' << arrayStr[i] << '-' << tempStr << ')';arrayStr[j] = ss.str();if (cac24(array, arrayStr, size, pos + 1) == 0)return 0;ss.str("");array[j] = mnsValue2;ss << '(' << tempStr << '-' << array[i] << ')';arrayStr[j] = ss.str();if (cac24(array, arrayStr, size, pos + 1) == 0)return 0;ss.str("");array[j] = mulValue;ss << '(' << arrayStr[i] << '*' << tempStr << ')';arrayStr[j] = ss.str();if (cac24(array, arrayStr, size, pos + 1) == 0)return 0;ss.str("");if (divValue != 0) {array[j] = divValue;ss << '(' << arrayStr[i] << '/' << tempStr << ')';arrayStr[j] = ss.str();if (cac24(array, arrayStr, size, pos + 1) == 0)return 0;ss.str("");}if (divValue2 != 0){array[j] = divValue2;ss << '(' << tempStr << '/' << arrayStr[i] << ')';arrayStr[j] = ss.str();if (cac24(array, arrayStr, size, pos + 1) == 0)return 0;ss.str("");}}}}void main(){int result = cac24(array, arrayStr, size, 0);if (result == -1)cout << "wrong" << endl;elsecout << arrayStr[size - 1] << endl;}


原创粉丝点击