时间限制: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:二次方程计算器的更多相关文章

  1. 九度OJ 题目1384:二维数组中的查找

    /********************************* * 日期:2013-10-11 * 作者:SJF0115 * 题号: 九度OJ 题目1384:二维数组中的查找 * 来源:http ...

  2. hdu 1284 关于钱币兑换的一系列问题 九度oj 题目1408:吃豆机器人

    钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  3. 九度oj题目&amp;吉大考研11年机试题全解

    九度oj题目(吉大考研11年机试题全解) 吉大考研机试2011年题目: 题目一(jobdu1105:字符串的反码).    http://ac.jobdu.com/problem.php?pid=11 ...

  4. 九度oj 题目1007:奥运排序问题

    九度oj 题目1007:奥运排序问题   恢复 题目描述: 按要求,给国家进行排名. 输入:                        有多组数据. 第一行给出国家数N,要求排名的国家数M,国家号 ...

  5. 九度oj 题目1087:约数的个数

    题目链接:http://ac.jobdu.com/problem.php?pid=1087 题目描述: 输入n个整数,依次输出每个数的约数的个数 输入: 输入的第一行为N,即数组的个数(N<=1 ...

  6. 九度OJ题目1105:字符串的反码

    tips:scanf,cin输入字符串遇到空格就停止,所以想输入一行字符并保留最后的"\0"还是用gets()函数比较好,九度OJ真操蛋,true?没有这个关键字,还是用1吧,还是 ...

  7. 九度oj题目1009:二叉搜索树

    题目描述: 判断两序列是否为同一二叉搜索树序列 输入:                        开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束. 接 ...

  8. 九度oj题目1002:Grading

    //不是说C语言就是C++的子集么,为毛printf在九度OJ上不能通过编译,abs还不支持参数为整型的abs()重载 //C++比较正确的做法是#include<cmath.h>,cou ...

  9. 九度OJ题目1003:A+B

    while(cin>>str1>>str2)就行了,多简单,不得不吐槽,九度的OJ真奇葩 题目描述: 给定两个整数A和B,其表示形式是:从个位开始,每三位数用逗号", ...

  10. 九度oj 题目1024:畅通工程

    题目描述:     省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).经过调查评估,得到的统计表中列出了有可能建设公路的若干条道 ...

随机推荐

  1. 红外图像处理之直方图均衡的matlab源码与效果验证

    红外图像是热辐射成像,由于场景中的目标与背景的温差相对较小,红外图像的动态范围大.对比度 低, 信噪比也较可见光图像的低.为了能够从红外图像中正确地识别出目标,必须对红外图像进行增强处理.一般红外探测 ...

  2. Jmeter中中文乱码

    jmeter-察看结果树-响应数据中的中文显示乱码 jmeter\bin\jmeter.properties 默认编码为:ISO-8859-1# The encoding to be used if ...

  3. jmeter操作myql数据库

    1.先安装mysql的驱动mysql-connector-java-5.1.7-bin.jar 配置jdbc的connection configuration Database Url :jdbc:m ...

  4. EasyNVR摄像机无插件直播安装使用错误原因解析

    背景需求 EasyNVR(www.easynvr.com)摄像机无插件直播流媒体服务器对于互联网的视频直播还是有着一定的贡献的.为了方便用户的体验使用,我们也在互联网上放置了对应的试用版本,并且也会随 ...

  5. view {display:block}

    view {display:block}

  6. JavaScript和jQuery改变标签内容

    HTML: <div id="mazey">content</div> JavaScript: var mazey=document.getElementB ...

  7. Java的==与equals之辨

    =======================原理速记=================================== equals重载后比较内容,==比较指针.否则equls等同于== (Ja ...

  8. MySQL将语句写入到binlog二进制日志中

    由于二进制日志是公共资源,所有线程都要写二进制日志,所以一定要避免两个线程同时更新二进制日志.因此,在事件组写二进制日志时,二进制日志将获得一个互斥锁LOCK_log,然后在事件组写完后释放,由于服务 ...

  9. MySQL事务隔离级别,锁(转)

    add by zhj: 本文针对的是MySQL的InnoDB存储引擎,不适用于MySQL的其它存储引擎和其它数据库 原文:MySQL数据库事务隔离级别(Transaction Isolation Le ...

  10. 我的Android进阶之旅------>RGB颜色查询对照表

    因为兼容性问题,色阶板功能只能在IE浏览器中运行 RGB颜色对照表   #FFFFFF   #FFFFF0   #FFFFE0   #FFFF00   #FFFAFA   #FFFAF0   #FFF ...