poj快算24 暴力

快算24

Time Limit: 1000MS Memory Limit: 65536K
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))
#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;
}




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值