uva:10700 - Camel trading(贪心)

题目:10700 - Camel trading

题目大意:给出一些表达式,表达式由数字和加号乘号组成,数字范围【1,20】。这些表达式可能缺少了括号,问这样的表达式加上括号后能得到的最大值和最小值。

解题思路:因为这些数的都是正整数,所以可以用贪心。不然看出最大值就是先做完加法在做乘法,最小值就是先做乘法在做加法。注意这里的数值要用long long 因为比表达式的值可能会超过int。

代码:

#include <stdio.h>
#include <string.h>

const int N = 15;
char op[N];
char str[3 * N];
long long num[N];

long long caculate_max (int count) {

	long long temp[N];
	for (int i = 0; i < count; i++)
		temp[i] = num[i];

	for (int i = count - 2; i >= 0; i--)
		if (op[i] == '+') {

			temp[i] += temp[i + 1];
			temp[i + 1] = temp[i];
		}

	long long sum = temp[0];
	for (int i = 0; i < count - 1; i++) {

		if (op[i] == '*')
			sum *= temp[i + 1];

	}
	return sum;
}

long long caculate_min (int count) {

	long long temp[N];
	for (int i = 0; i < count; i++)
		temp[i] = num[i];

	for (int i = count - 2; i >= 0; i--) {

		if (op[i] == '*')
			temp[i] = temp[i] * temp[i + 1];
	}

	long long sum = temp[0];
	for (int i = 0; i <= count - 2; i++) {

		if (op[i] == '+')
			sum += temp[i + 1];
	}

	return sum;
}

int init () {

	int t = 0;
	long long sum;
	scanf ("%s", str);
	for (int i = 0; i < strlen (str); i++) {

		if (str[i] == '+' || str[i] == '*')
			op[t++] = str[i];
		else {

			sum = 0;
			while (str[i] >= '0' && str[i] <= '9') {

				sum = sum * 10 + str[i] - '0';
				i++;
			}
			num[t] = sum;
			i--;
		}
	}
	return t + 1;
}

int main () {

	int t;
	int count;
	scanf ("%d", &t);
	while (t--) {

		count = init();
		printf ("The maximum and minimum are %lld and %lld.\n", caculate_max(count), caculate_min(count));

	}
	return 0;
}

uva:10700 - Camel trading(贪心),布布扣,bubuko.com

时间: 2024-09-30 20:38:09

uva:10700 - Camel trading(贪心)的相关文章

UVA - 10700 - Camel trading (简单贪心)

UVA - 10700 Camel trading Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu Submit Status Description Problem E - Camel trading Time Limit: 1 second Background Aroud 800 A.D., El Mamum, Calif of Baghdad was presented the formu

UVA 10700 Camel trading(计算式子加减乘除的优先级处理)

Camel trading Time Limit: 1 second Background Aroud 800 A.D., El Mamum, Calif of Baghdad was presented the formula 1+2*3*4+5, which had its origin in the financial accounts of a camel transaction. The formula lacked parenthesis and was ambiguous. So,

UVA 10700 Camel trading

1 #include <iostream> 2 #include <cstdio> 3 #include <stack> 4 #define sc(x) scanf("%d",&x) 5 #define sc1(x) scanf("%lld",&x) 6 #define pf(x) printf("%d\n",x) 7 #define FOR(i,b,e) for(int i=b;i<N;

uva:10700 - Camel trading(贪婪)

题目:10700 - Camel trading 题目大意:给出一些表达式,表达式由数字和加号乘号组成,数字范围[1,20].这些表达式可能缺少了括号,问这种表达式加上括号后能得到的最大值和最小值. 解题思路:由于这些数的都是正整数,所以能够用贪心.不然看出最大值就是先做完加法在做乘法,最小值就是先做乘法在做加法.注意这里的数值要用long long 由于比表达式的值可能会超过int. 代码: #include <stdio.h> #include <string.h> const

UVA 10317 - Equating Equations 贪心 dfs

UVA 10317 - Equating Equations 贪心 dfs ACM 题目地址:UVA 10317 - Equating Equations 题意: 给一个等式,但是这个等式不一定是正确的,要你对等式中的数字重新排序,使得等式成立.等式只有+和-,数字个数小于16. 分析: 以a + b - c = d - e为例子. 1. 我们把等式右边的各项都换到左边,a + b - c - d + e = 0 2. 把+项和-项放一起,就变成(a + b + e) - (c + d) = 0

UVA 12130 - Summits(BFS+贪心)

UVA 12130 - Summits 题目链接 题意:给定一个h * w的图,每个位置有一个值,现在要求出这个图上的峰顶有多少个.峰顶是这样定义的,有一个d值,如果一个位置是峰顶,那么它不能走到不大于该峰顶高度 - d的位置,如果满足这个条件下,并且无法走到更高的山峰,那么它就是峰顶 思路:利用贪心的策略,把所有点丢到优先队列,每次取出最高的峰值开始找,进行广搜,搜的过程中记录下最大值的点的个数,如果这个是峰顶,就加上这个数.判断是不是峰顶的方法为,如果广搜过程中,不会找到一个点的能到的最高峰

uva 1534 - Taekwondo(dp+贪心)

题目连接:uva 1534 - Taekwondo 题目大意:有两组什么东西,题目背景有点忘记了,就是给出两组数,两组个数分别为n,m,要求找出min(n,m)对数,每个数最多最多选一次,使得这min(n,m)对数ai,bi,ai-bi的绝对值之和最小. 解题思路:贪心,将两组数分别排序,然后dp[i][j]表示i对,匹配到j时候的最优解. #include <cstdio> #include <cstring> #include <cmath> #include &l

Problem E - Camel trading(栈和队列)

Description Problem E - Camel trading Time Limit: 1 second Background Aroud 800 A.D., El Mamum, Calif of Baghdad was presented the formula 1+2*3*4+5, which had its origin in the financial accounts of a camel transaction. The formula lacked parenthesi

UVA 1422 - Processor (二分+贪心+优先队列)

先对开始时间进行排序,在利用优先队列是结束时间早点先出队: 因为时间只有20000,我们可以去枚举每个单位时间,看要给分配给那个任务, 如果某个时间队列中还有结束时间大于枚举的时间,就跳出判断是在mid的右边. #include<stdio.h> #include<iostream> #include<string.h> #include<algorithm> #include<stdlib.h> #include<math.h> #