人生艰难之九度OJ 1103 1101
来源:互联网 发布:思想聚焦知乎 编辑:程序博客网 时间:2024/04/30 18:42
题目1103:二次方程计算器
题目1101:计算表达式
SJTU的题目明显更好,然而纱布般的我做这种题无法1A,又听说CCNU机试只能提交一次,所以要GG了。。。。
时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:2720
解决:612
- 题目描述:
设计一个二次方程计算器
- 输入:
每个案例是关于x的一个二次方程表达式,为了简单,每个系数都是整数形式。
- 输出:
每个案例输出两个实数(由小到大输出,中间由空格隔开),保留两位小数;如果无解,则输出“No Solution”。
- 样例输入:
x^2+x=3x+4
- 样例输出:
-1.24 3.24
思路:很直白的模拟,但是细节和边界要处理好,大致的模拟思路就是分等号左右边,记录下二次项,一次项和常数项的系数,这里要特别注意符号,把sgn变化的位置写挫了然后一直在跪,然而自己给的各种样例都能过也真是感动中国了。。记录好之后相减,然后得到正常的一元二次方程,然后用判别式求解就可以了。
#include<cstdio>#include<cstring>#include<cmath>#include<iostream>#include<algorithm>#include<string>using namespace std;string s;int main(){ while(cin>>s) { int pos; for(int i=0;s[i]!='\0';i++) { if(s[i]=='=') { pos=i; break; } }//找等号 int al,bl,cl; al=bl=cl=0; int ar,br,cr; ar=br=cr=0; int tmp=0; int sgn=1; for(int i=0;i<pos;)//处理左半部分 { if(s[i]>='0'&&s[i]<='9') { tmp=tmp*10+s[i]-'0'; i++; }//扫系数 else if(s[i]!='x')//要么是常数项要么是符号 { if(s[i]=='+') { cl+=tmp*sgn; sgn=1; } else if(s[i]=='-') { cl+=tmp*sgn; sgn=-1; } i++; tmp=0;//及时清零 } else if(s[i]=='x'&&s[i+1]=='^')//二次项 { if(i==0||s[i-1]=='+'||s[i-1]=='-')//特别注意一下在起始位置系数为1或-1 tmp=1; al+=tmp*sgn; tmp=0; i=i+3;//连跳3个 } else if(s[i]=='x'&&s[i+1]!='^') { if(i==0||s[i-1]=='+'||s[i-1]=='-') tmp=1; bl+=tmp*sgn; tmp=0; i++; } //cout<<2333<<endl; } cl+=tmp*sgn; tmp=0; sgn=1; for(int i=pos+1;s[i]!='\0';) { if(s[i]>='0'&&s[i]<='9') { tmp=tmp*10+s[i]-'0'; i++; } else if(s[i]!='x') { if(s[i]=='+') { cr+=tmp*sgn; sgn=1; } else if(s[i]=='-') { cr+=tmp*sgn; sgn=-1; } i++; tmp=0; } else if(s[i]=='x'&&s[i+1]=='^') { if(i==pos+1||s[i-1]=='+'||s[i-1]=='-') tmp=1; ar+=tmp*sgn; tmp=0; i=i+3; } else if(s[i]=='x'&&s[i+1]!='^') { if(i==pos+1||s[i-1]=='+'||s[i-1]=='-') tmp=1; br+=tmp*sgn; tmp=0; i++; } //cout<<2333<<endl; } cr+=tmp*sgn; double a,b,c; a=(al-ar)*1.0; b=(bl-br)*1.0; c=(cl-cr)*1.0; if(b*b-4*a*c>=0)//基本判断有无解 { double x1=(-b-sqrt(b*b-4.0*a*c))/(2.0*a); double x2=(-b+sqrt(b*b-4.0*a*c))/(2.0*a); double mina=min(x1,x2); double maxn=max(x1,x2); printf("%.2lf %.2lf\n",mina,maxn); } else { cout<<"No Solution"<<endl; } } return 0;}
题目1101:计算表达式
时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:4276
解决:1311
- 题目描述:
对于一个不存在括号的表达式进行计算
- 输入:
存在多种数据,每组数据一行,表达式不存在空格
- 输出:
输出结果
- 样例输入:
6/2+3+3*4
- 样例输出:
18
#include<cstdio>#include<cstring>#include<cmath>#include<iostream>#include<algorithm>#include<stack>using namespace std;stack<int> sn;stack<char>sc;int n;int i;char s[1005];int getnum(){ int tmp=0; while(s[i]>='0'&&s[i]<='9') { tmp=tmp*10+s[i]-'0'; i++; } return tmp;}char getch(){ return s[i++];}void calc(){ int a,b,t; char c; if(sc.empty()) return ; a=sn.top(); sn.pop(); b=sn.top(); sn.pop(); c=sc.top(); sc.pop(); // cout<<a<<"~~"<<b<<"~~"<<c<<endl; switch(c) { case '+': t=b+a; break; case '-': t=b-a; break; case '*': t=b*a; break; case '/': t=b/a; break; } sn.push(t);}int main(){ while(cin>>s) { i=0; char op; n=getnum(); //cout<<n<<endl; sn.push(int(n)); while(s[i]!='\0') { op=getch(); n=getnum(); // cout<<op<<"~~"<<n<<endl; if(op=='+'||op=='-') { calc(); // cout<<sn.top()<<"~~"<<endl; sc.push(op); sn.push(int(n)); } else { sc.push(op); sn.push(int(n)); calc(); // cout<<sn.top()<<"~~"<<endl; } } while(!sc.empty()) { calc(); // cout<<sn.top()<<"~~"<<endl; } cout<<sn.top()<<endl; sn.pop(); } return 0;}
SJTU的题目明显更好,然而纱布般的我做这种题无法1A,又听说CCNU机试只能提交一次,所以要GG了。。。。
0 0
- 人生艰难之九度OJ 1103 1101
- 人生艰难
- 九度oj 1103
- 九度oj 1101
- 九度 OJ 之 题目1202:排序
- 【九度OJ】:九度OJ 1050
- 【九度OJ】:九度OJ 1053
- 【九度OJ】:九度OJ 1056
- 【九度OJ】:九度OJ 1059
- 【九度OJ】:九度OJ 1206
- 人生九度
- 九度OJ 1103 二次方程计算器
- 九度oj 题目1103:二次方程计算器
- 九度OJ 1103 二次方程计算器
- 九度 oj 题目1103:二次方程计算器
- 九度OJ-1103:二次方程计算器
- 九度OJ-1101-计算表达式
- 九度OJ 1101 计算表达式
- getline()的学习
- Wincc安装教程+破解教程(包括软件下载链接——百度网盘)
- Shell - 3
- 最大连续子数组和
- 小马哥----高仿红米1s 主板型号M9 新版屏幕驱动 拆机主板图与识别图
- 人生艰难之九度OJ 1103 1101
- android自定义控件(四) View中的方法
- iOS8新功能——Self Sizing Cells和Dynamic Type
- java generic研究分析
- blog
- iOS开发——打造自己的“美图秀秀”
- linux 目录结构
- Windows 8.1 下 XAMPP 的 Apache 服务器无法启动的解决
- ios—CAlayer层的属性