快算24
Time Limit: 1000MS Memory Limit: 65536K
Total Submissions: 4028 Accepted: 2445
Total Submissions: 4028 Accepted: 2445
Description
给定4个不大于10的正整数(范围1-10),要求在不改变数据先后顺序的情况下,采用加减乘除四种运算,找到一个表达式,使得最后的结果是24。
Input
4个不大于10的正整数。输入数据保证存在唯一解。
Output
不改变位置顺序,由'+','-','*','/'4个运算符和'(',')'组成的表达式
Sample Input
5 5 1 5
Sample Output
5*(5-(1/5))
Source
方法就是暴力,对于每种情况又有五种加括号的方法
((a b) c) d
(a b) (c d)
(a (b c) d)
a (b (c d))
给定4个不大于10的正整数(范围1-10),要求在不改变数据先后顺序的情况下,采用加减乘除四种运算,找到一个表达式,使得最后的结果是24。
Input
4个不大于10的正整数。输入数据保证存在唯一解。
Output
不改变位置顺序,由'+','-','*','/'4个运算符和'(',')'组成的表达式
Sample Input
5 5 1 5
Sample Output
5*(5-(1/5))
Source
方法就是暴力,对于每种情况又有五种加括号的方法
((a b) c) d
(a b) (c d)
(a (b c) d)
a (b (c d))
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
double f(double a, char operate, double b)
{
if(operate == '+')
{
return a + b;
}
if(operate == '-')
{
return a - b;
}
if(operate == '*')
{
return a * b;
}
if(operate == '/')
{
return a / b;
}
}
char oper[] = "+-*/";
int main()
{
// freopen("in.txt", "r", stdin);
int a, b, c, d;
while(scanf("%d%d%d%d", &a, &b, &c, &d) != EOF)
{
int i, j, k;
int flag = 1;
for(i = 0; flag && i < 4; ++i)
{
for(j = 0; flag && j < 4; ++j)
{
for(k = 0; flag && k < 4; ++k)
{
if(f(f(f(a, oper[i], b), oper[j], c), oper[k], d) == 24)
{
printf("((%d%c%d)%c%d)%c%d\n", a, oper[i], b, oper[j], c, oper[k], d);
flag = 0;
break;
}
if(f(f(a, oper[i], b),oper[j], f(c, oper[k], d)) == 24)
{
printf("(%d%c%d)%c(%d%c%d)\n", a, oper[i], b, oper[j], c, oper[k], d);
flag = 0;
break;
}
if(f(f(a, oper[i], f(b, oper[j], c)), oper[k], d) == 24)
{
printf("(%d%c(%d%c%d))%c%d\n", a, oper[i], b, oper[j], c, oper[k], d);
flag = 0;
break;
}
if(f(a, oper[i], f(f(b, oper[j], c), oper[k], d)) == 24)
{
printf("%d%c((%d%c%d)%c%d)\n", a, oper[i], b, oper[j], c, oper[k], d);
flag = 0;
break;
}
if(f(a, oper[i], f(b, oper[j], f(c, oper[k], d))) == 24)
{
printf("%d%c(%d%c(%d%c%d))\n", a, oper[i], b, oper[j], c, oper[k], d);
flag = 0;
break;
}
}
}
}
}
return 0;
}