利用c语言实现 24点的拓展,n数字之间的计算为m点
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int flag = 0;
int NUM[10] = { 0 };//原始数组
char shuchu[100][150];
int N; //用于计算递归次数 N-n
int num[1000];
int m;
void digui(int n) {
if (n == 1) {
if (num[0] == m )//判断结果是否为24
{
if (strlen(shuchu[0]) > N + 3 * (N - 1)) {
shuchu[0][N + 3 * (N - 1)-1] = ')';
shuchu[0][N + 3 * (N - 1) - 1] = '\0';
}
printf("%s\n",shuchu[0]);
//system("pause");
flag++;
}
}
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
int a, b;
char x[1500];
char y[1500];
a = num[i]; //op[i]
b = num[j]; //op[j]
num[j] = num[n - 1];
strcpy(x, shuchu[i]);
strcpy(y, shuchu[j]);
memset(shuchu[i], 0, sizeof(shuchu[i]));
strcpy(shuchu[j], shuchu[n-1]);
num[i] = a + b;
memset(shuchu[i], 0, sizeof(shuchu[i]));
strcat(shuchu[i], "("); strcat(shuchu[i], x); strcat(shuchu[i], "+"); strcat(shuchu[i], y); strcat(shuchu[i], ")");
digui(n - 1);
num[i] = a - b;
memset(shuchu[i], 0, sizeof(shuchu[i]));
strcat(shuchu[i], "("); strcat(shuchu[i], x); strcat(shuchu[i], "-"); strcat(shuchu[i], y); strcat(shuchu[i], ")");
digui(n - 1);
num[i] = b - a;
memset(shuchu[i], 0, sizeof(shuchu[i]));
strcat(shuchu[i], "("); strcat(shuchu[i], y); strcat(shuchu[i], "-"); strcat(shuchu[i], x); strcat(shuchu[i], ")");
digui(n - 1);
num[i] = a * b;
memset(shuchu[i], 0, sizeof(shuchu[i]));
strcat(shuchu[i], "("); strcat(shuchu[i], x); strcat(shuchu[i], "*"); strcat(shuchu[i], y); strcat(shuchu[i], ")");
digui(n - 1);
if (b != 0 && a % b==0) {
num[i] = a / b;
memset(shuchu[i], 0, sizeof(shuchu[i]));
strcat(shuchu[i], "("); strcat(shuchu[i], x); strcat(shuchu[i], "/"); strcat(shuchu[i], y); strcat(shuchu[i], ")");
digui(n - 1);
}
if (a != 0 && b % a == 0) {
num[i] = b / a;
memset(shuchu[i], 0, sizeof(shuchu[i]));
strcat(shuchu[i], "("); strcat(shuchu[i], y); strcat(shuchu[i], "/"); strcat(shuchu[i], x); strcat(shuchu[i], ")");
digui(n - 1);
}
num[i] = a;
num[j] = b;
memset(shuchu[i], 0, sizeof(shuchu[i]));
strcpy(shuchu[i] , x);
memset(shuchu[j], 0, sizeof(shuchu[j]));
strcpy(shuchu[j], y);
}
}
}
int main()
{
printf("本程序只能计算1-6个数,7个数时间复杂度太高(不建议),\n建议输入计算数字输入在(0-9),否则将表示为字母或字符\n计算均为int型计算\n");
int n;
printf("请输入计算个数:");
scanf_s("%d", &n);
N = n;
printf("请输入总点数:");
scanf_s("%d", &m);
printf("请输入用于计算的数字:");
for (int i = 0; i < n; i++) {
scanf_s("%d", &num[i]);
char z[100];
z[0] = '0' + num[i];
strncpy(shuchu[i], z,1);
}
digui(n);
printf("一共%d个解\n", flag);
return 0;
}