九度oj-题目1103:二次方程计算器
时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:2799
解决:633
- 题目描述:
-
设计一个二次方程计算器
- 输入:
-
每个案例是关于x的一个二次方程表达式,为了简单,每个系数都是整数形式。
- 输出:
-
每个案例输出两个实数(由小到大输出,中间由空格隔开),保留两位小数;如果无解,则输出“No Solution”。
- 样例输入:
-
x^2+x=3x+4
- 样例输出:
-
-1.24 3.24
- 来源:
- 2011年上海交通大学计算机研究生机试真题
- 因为是多组输入,导致WA一发!
- 分析:统计x^2的系数,统计x的系数,统计常数和。转换成ax^2+bx+c=0的形式,公式法求解。
-
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <math.h>
#include <iostream>
#include <string>
#include <algorithm> using namespace std; int main()
{
char s[200];
int i, j, len;
while(scanf("%s", s)!=EOF)
{
len=strlen(s); int a=0, b=0, c=0;
int A=0, B=0, C=0; int pos; for(i=0; i<len; i++){
if(s[i]=='='){
pos=i; break;
}
}//先找到到= for(i=0; i+2<pos; i++){
if(s[i]=='x' && s[i+1]=='^' && s[i+2]=='2'){
if(i-1==-1){ a=a+1; }
else if(i-1>-1){
int jin=1;
int cur=0;
j=i-1;
while(isdigit(s[j]) && j>=0){
cur=cur+(s[j]-48)*jin;
jin=jin*10;
j--;
}
if(cur==0) cur=1;
if(j>=0 && s[j]=='-') cur=-cur;
a+=cur;
}
}
}
for(i=pos+1; i+2<len; i++){
if(s[i]=='x' && s[i+1]=='^' && s[i+2]=='2'){
if(i-1==pos){ A=A+1; }
else if(i-1>pos){
int jin=1;
int cur=0;
j=i-1;
while(isdigit(s[j]) && j>pos){
cur=cur+(s[j]-48)*jin;
jin=jin*10;
j--;
}
if(cur==0) cur=1;
if(j>pos && s[j]=='-') cur=-cur;
A+=cur;
}
}
}
//printf("%d\n", a-A); for(i=0; i<pos; i++){
if(s[i]=='x' && s[i+1]!='^'){//这一定是x的一次方
int jin=1;
int cur=0;
j=i-1;
while(isdigit(s[j]) && j>=0){
cur=cur+jin*(s[j]-48);
jin=jin*10;
j--;
}
if(cur==0) cur=1;
if(j>=0 && s[j]=='-') cur=-cur;
b+=cur;
}
} for(i=pos+1; i<len; i++){
if(s[i]=='x'){
if(i+1<len ){
if(s[i+1]!='^'){
int jin=1;
int cur=0;
j=i-1;
while(isdigit(s[j]) && j>pos){
cur=cur+jin*(s[j]-48);
jin=jin*10;
j--;
}
if(cur==0) cur=1;
if(j>pos && s[j]=='-') cur=-cur;
B+=cur;
}
}else{
int jin=1;
int cur=0;
j=i-1;
while(isdigit(s[j]) && j>pos){
cur=cur+jin*(s[j]-48);
jin=jin*10;
j--;
}
if(cur==0) cur=1;
if(j>pos && s[j]=='-') cur=-cur;
B+=cur;
}
}
}
//printf("%d\n", b-B); for(i=0; i<=pos; i++){
if(s[i]=='+'||s[i]=='-'||s[i]=='='){
int jin=1;
int cur=0;
j=i-1;
while(isdigit(s[j]) && j>=0){
cur=cur+jin*(s[j]-48);
jin=jin*10;
j--;
}
if(j>=0 && s[j]=='^') cur=0;
if(j>=0 && s[j]=='-') cur=-cur;
c+=cur;
}
}
for(i=pos+1; i<len; i++){
if(s[i]=='+' || s[i]=='-'){
int jin=1;
int cur=0;
j=i-1;
while(isdigit(s[j]) && j>pos){
cur=cur+jin*(s[j]-48);
jin=jin*10;
j--;
}
if(j>pos && s[j]=='^') cur=0;
if(j>pos && s[j]=='-') cur=-cur;
C+=cur;
}
}
if(isdigit(s[len-1])){
int jin=1;
int cur=0;
j=i-1;
while(isdigit(s[j]) && j>pos){
cur=cur+jin*(s[j]-48);
jin=jin*10;
j--;
}
if(j>pos && s[j]=='^') cur=0;
if(j>pos && s[j]=='-') cur=-cur;
C+=cur;
}
//printf("%d\n", c-C); a=a-A;
b=b-B;
c=c-C;
double dd=b*b-4*a*c;
if(dd<0){
printf("No Solution\n");
}else{
double ans;
ans=(-b-sqrt(b*b-4*a*c))/(2.0*a);
printf("%.2lf ", ans);
ans=(-b+sqrt(b*b-4*a*c))/(2.0*a);
printf("%.2lf\n", ans);
} }
return 0;
}
九度oj-题目1103:二次方程计算器的更多相关文章
- 九度OJ 题目1384:二维数组中的查找
/********************************* * 日期:2013-10-11 * 作者:SJF0115 * 题号: 九度OJ 题目1384:二维数组中的查找 * 来源:http ...
- hdu 1284 关于钱币兑换的一系列问题 九度oj 题目1408:吃豆机器人
钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- 九度oj题目&吉大考研11年机试题全解
九度oj题目(吉大考研11年机试题全解) 吉大考研机试2011年题目: 题目一(jobdu1105:字符串的反码). http://ac.jobdu.com/problem.php?pid=11 ...
- 九度oj 题目1007:奥运排序问题
九度oj 题目1007:奥运排序问题 恢复 题目描述: 按要求,给国家进行排名. 输入: 有多组数据. 第一行给出国家数N,要求排名的国家数M,国家号 ...
- 九度oj 题目1087:约数的个数
题目链接:http://ac.jobdu.com/problem.php?pid=1087 题目描述: 输入n个整数,依次输出每个数的约数的个数 输入: 输入的第一行为N,即数组的个数(N<=1 ...
- 九度OJ题目1105:字符串的反码
tips:scanf,cin输入字符串遇到空格就停止,所以想输入一行字符并保留最后的"\0"还是用gets()函数比较好,九度OJ真操蛋,true?没有这个关键字,还是用1吧,还是 ...
- 九度oj题目1009:二叉搜索树
题目描述: 判断两序列是否为同一二叉搜索树序列 输入: 开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束. 接 ...
- 九度oj题目1002:Grading
//不是说C语言就是C++的子集么,为毛printf在九度OJ上不能通过编译,abs还不支持参数为整型的abs()重载 //C++比较正确的做法是#include<cmath.h>,cou ...
- 九度OJ题目1003:A+B
while(cin>>str1>>str2)就行了,多简单,不得不吐槽,九度的OJ真奇葩 题目描述: 给定两个整数A和B,其表示形式是:从个位开始,每三位数用逗号", ...
- 九度oj 题目1024:畅通工程
题目描述: 省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).经过调查评估,得到的统计表中列出了有可能建设公路的若干条道 ...
随机推荐
- .net全局定时定期执行某些操作在Global.asax中具体实现
全局定时定期执行某些操作看起来是多么自动化的一个问题不过在.net的Global.asax文件中稍微配置即可实现,详细配置如下,感兴趣的朋友可以参考下哈 <%@ Application Lang ...
- 一个智障安装了一天的python和graphlab的血泪史
大概的过程是这样的: 先装了python3.6.1.,然后发现搞错了Σ(  ̄□ ̄||),是32 bit的,卸了重装python 3.6.1 (64bit). 然后装easy_install.pip.i ...
- Error:指向绑定函数的指针只能用于调用函数
a1.determinant; 改为: a1.determinant(); Eigen::MatrixXd a1(,);//ImagePoint a1<<n1,p1,n2,p2; doub ...
- ios -bitmap上下文生成图片 生成水印
- (void)test { // 0. 加载背景图片 UIImage *image = [UIImage imageNamed:@"psb"]; // 1.创建bitmap上下文 ...
- Docker学习(1安装docker)
1.在安装之前首先查看系统版本,ubuntu centos6 7 安装方式并不相同,所以首先确定系统版本 #cat /etc/issue 确定系统版本 2.开始安装Docker (1)Ubuntu下 ...
- jQuery倒计时实例
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- libnids介
转自:http://blog.chinaunix.net/uid-22832715-id-2111578.html Libnids开发包介绍 Libnids是一个用于网络入侵检测开发的专业编程 ...
- java学习笔记——数据类型及类型转换
数据类型分为: 1.引用类型(字符型); 2.基本数据类型(数值型); 以下为基本数据类型介绍(括号内的数字表示该类型所占据的字节数) a.整型 byte(8) short(16) int(3 ...
- 在Tomcat配置JNDI数据源的三种方式
最近使用到了在tomcat下配置数据源的内容,在这里转载一篇文章记录下 转载自: http://blog.csdn.net/dyllove98/article/details/7706218 在我过去 ...
- Python代码实现删除一个list里面的重复元素
lst=[11,22,33,44,22,11,22,44] print(list(set(lst))) # 打印结果:[33, 11, 44, 22] d = {} for index,item in ...