uva--10700
题意:
输入一串仅仅含有+和*号的表达式,能够通过加入括号来改变表达式的值,求表达式的最大最小值。
思路:
表达式中的数都是不大于20的正整数,由a*b+c<=a*(b+c)能够知道。先算乘法后算加法时表达式的值最小,
先算加法后算乘法时表达式的值最大。
由这个思路,我先把表达式中的运算符和数字都提取出来放在栈中,然后依据两种情况进行计算。
能够写出代码后WA了无数次就是过不了。。。
。
。。
以下的AC代码是看了别人的题解后模仿写出的,其基本的思路是一样,可是他用数组模拟了栈。
然后直接在从表达式中提取数据的过程中进行了计算;我认为他思路比較巧妙的一点是,在第一个数字前
就如果了一个运算符。将第一个数字和其它的数字在形式上统一了起来,这样大大的简化了处理过程。
另外这个题目的结果比較大,须要用double类型来保存。
代码例如以下:
<span style="font-size:18px;">#include<iostream>
#include<cstdio>
#include<cstring>
#include<stack>
using namespace std; int main()
{
int i,j,k,t;
char str[100];
double min,max,stack[30];
scanf("%d",&t);
while(t--)
{
scanf("%s",str);
i=0; min=0;max=1.0;
int top=0;
char ch='+';
while(str[i]!='\0')
{
k=0;
while(str[i]>='0'&&str[i]<='9')
{
k=k*10+str[i]-'0';
i++;
}
if(ch=='+')
stack[++top]=k;
else
stack[top]*=k;
if(str[i]!='\0')
ch=str[i++];
}
for(i=1;i<=top;i++)
min+=stack[i];
top=0; i=0; ch='*';
while(str[i]!='\0')
{
k=0;
while(str[i]>='0'&&str[i]<='9')
{
k=k*10+str[i]-'0';
i++;
}
if(ch=='*')
stack[++top]=k;
else
stack[top]+=k;
if(str[i]!='\0')
ch=str[i++];
}
for(i=1;i<=top;i++)
max*=stack[i];
printf("The maximum and minimum are %0.lf and %0.lf.\n",max,min);
}
return 0;
}
</span>
找不到错误的WA代码例如以下:
<span style="font-size:18px;">#include<iostream>
#include<cstdio>
#include<cstring>
#include<stack>
using namespace std; int main()
{
char str[10000];
int i,j,k,t;
double a[10000];
scanf("%d",&t);
while(t--)
{
stack<double>s1,s2;
stack<char>s3,s4;
scanf("%s",str);
double minnum=0,maxnum=1;
int len=strlen(str);
k=0;
for(i=0;i<len;i++)
{
k=k*10+str[i]-'0';
if(str[i]=='+'||str[i]=='*')
break;
}
if(i>=len)
{
printf("The maximum and minimum are %d and %d.\n",k,k);
continue;
}
for(i=0;i<len;i++)
{
k=0;
while(str[i]!='*'&&str[i]!='+'&&i<len)
{
k=k*10+str[i]-'0';
i++;
}
s1.push(k);
s2.push(k);
s3.push(str[i]);
s4.push(str[i]);
}
s3.pop(); s4.pop();
k=0;
while(1)
{
char ch=s3.top();
s3.pop();
if(ch=='*')
{
int k1=s1.top();
s1.pop();
int k2=s1.top();
s1.pop();
s1.push(k1*k2);
}
else
{
a[k++]=s1.top();
s1.pop();
}
if(s3.empty())
{
a[k++]=s1.top();
s1.pop();
break;
}
}
for(i=0;i<k;i++)
minnum+=a[i];
k=0;
while(1)
{
char ch=s4.top();
s4.pop();
if(ch=='+')
{
int k1=s2.top();
s2.pop();
int k2=s2.top();
s2.pop();
s2.push(k1+k2);
}
else
{
a[k++]=s2.top();
s2.pop();
}
if(s4.empty())
{
a[k++]=s2.top();
s2.pop();
break;
}
}
for(i=0;i<k;i++)
maxnum*=a[i];
printf("The maximum and minimum are %0.lf and %0.lf.\n",maxnum,minnum);
}
return 0;
}
</span>
uva--10700的更多相关文章
- UVA 10700 Camel trading 无括号的表达式 贪心
题意:给出只包含数字和+*的表达式,你可以自己安排每一个运算的顺序,让你找出表达式可能得到的最大值和最小值. 很明显,先乘后加是最小值,先加后乘能得到最大值. 其实不是很明显... 证明下: 数字的范 ...
- UVa 10700 - Camel trading
题目大意:给一个不含括号.只有+和*运算的表达式,数字的范围在1到20之间,算出计算结果的可能最大值和最小值. 贪心,如果加法优先级比乘法高,那么得出的结果为最大值.(a+b)*c = a*c + b ...
- uva:10700 - Camel trading(贪婪)
题目:10700 - Camel trading 题目大意:给出一些表达式,表达式由数字和加号乘号组成,数字范围[1,20].这些表达式可能缺少了括号,问这种表达式加上括号后能得到的最大值和最小值. ...
- uva 1354 Mobile Computing ——yhx
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABGcAAANuCAYAAAC7f2QuAAAgAElEQVR4nOy9XUhjWbo3vu72RRgkF5
- UVA 10564 Paths through the Hourglass[DP 打印]
UVA - 10564 Paths through the Hourglass 题意: 要求从第一层走到最下面一层,只能往左下或右下走 问有多少条路径之和刚好等于S? 如果有的话,输出字典序最小的路径 ...
- UVA 11404 Palindromic Subsequence[DP LCS 打印]
UVA - 11404 Palindromic Subsequence 题意:一个字符串,删去0个或多个字符,输出字典序最小且最长的回文字符串 不要求路径区间DP都可以做 然而要字典序最小 倒过来求L ...
- UVA&&POJ离散概率与数学期望入门练习[4]
POJ3869 Headshot 题意:给出左轮手枪的子弹序列,打了一枪没子弹,要使下一枪也没子弹概率最大应该rotate还是shoot 条件概率,|00|/(|00|+|01|)和|0|/n谁大的问 ...
- UVA计数方法练习[3]
UVA - 11538 Chess Queen 题意:n*m放置两个互相攻击的后的方案数 分开讨论行 列 两条对角线 一个求和式 可以化简后计算 // // main.cpp // uva11538 ...
- UVA数学入门训练Round1[6]
UVA - 11388 GCD LCM 题意:输入g和l,找到a和b,gcd(a,b)=g,lacm(a,b)=l,a<b且a最小 g不能整除l时无解,否则一定g,l最小 #include &l ...
- UVA - 1625 Color Length[序列DP 代价计算技巧]
UVA - 1625 Color Length 白书 很明显f[i][j]表示第一个取到i第二个取到j的代价 问题在于代价的计算,并不知道每种颜色的开始和结束 和模拟赛那道环形DP很想,计算这 ...
随机推荐
- java设计师初入职场,如何站稳脚跟
本文内容一共由3部分展开 a:新人如何快速融入团队 b:如何在职场中提升自己影响力 c:如何规进行职业规划 a:如何快速融入团队 能在层层选拔下进入公司,说明你工作的能力还是得到公司的认可,不过这 ...
- Varnish 实战项目
实现基于Keepalived+Haproxy+Varnish+LNMP企业级架构 原理:缓存,又称加速器,用于加速运行速度较快的设备与较慢设备之间的通信.基于程序的运行具有局部性特征其能实现加速的功能 ...
- java 压缩导出多个excel
简单介绍下我实现的功能,首先是我的excel上传,它是以blob字段存储在oracel数据库中的,我实现的是循环遍历blob字段并使用io流进行打包下载,如有需要可自行修改 使用技术有,springM ...
- [转载] 网络IO模型
转载自http://blog.csdn.net/zhoudaxia/article/details/8974779 同步(synchronous) IO和异步(asynchronous) IO,阻塞( ...
- 【手记】让Fiddler抓取入站请求,或者叫用Fiddler做反向代理
注意:本文不涉及HTTPS的场景 最近在弄公众号开发,除了主动去调公众号接口,还存在公众号后台要反过来调你的情形,攻受转换一线间.对于回调的情况,想要知道对方是怎样来请求的很有必要.此前经常用Fidd ...
- 【Java入门提高篇】Day3 抽象类与接口的比较
抽象类跟接口都讲完了,现在来做一个比较. 其实说实话,没有多大的可比较性,它们是完全不同的两个东西,它们的抽象不在同一个层级上.但是为了让大家更好的理解,还是做一个比较吧,毕竟它们都很抽象(233). ...
- Office2016 KMS激活
Office标准版激活 一新买本子需要安装Office,闲来无事就安装了一款Office Standard 2016,网上许多激活秘钥均已过期,无法激活,无奈下选择KMS激活. KMS下载链接如下: ...
- 三、Hadoop学习笔记————从MapReduce到Yarn
Yarn减轻了JobTracker的负担,对其进行了解耦
- js之ECMAscript
1.基本数据类型和一些运算 <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...
- 随笔-SQL的三种存储引擎即三种类型的表
MYSQL 的环境变量:......server/bin下 引擎(Engine):是电子平台上开发程序或系统的核心组件.利用引擎,开发者可迅速建立.铺设程序所需的功能,或利用其辅助程序的运转.一般而言 ...