时间限制: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. KnockOut 绑定之foreach绑定(mvc+knockout)

    什么时候使用foreach绑定 foreach绑定对于数组中的每一个元素复制一节标记语言,也就是html,并且将这节标记语言和数组里面的每一个元素绑定.当我们呈现一组list数据,或者一个表格的时候, ...

  2. BAPI、badi 和 LSMW 的相同点和不同点及具体操作

    一开始badi.BAPI.LSMW关系极其混乱,好像都是传输数据, just transfer data from SAP system to non-SAP system or transfer d ...

  3. TOC之关键链项目管理遇到软件project7原则

    编著者:张克强    微博:张克强-敏捷307 软件project7原则简单介绍 美国著名软件project专家鲍伊姆(B.W.Boehm,也又另译为勃姆)在总结软件project准则和信条的基础上, ...

  4. python 数学操作符

    优先级从高到低 print("2 ** 3 = %d" % 2 ** 3) 2 ** 3 = 8print("7 % 2 = {}".format(7 % 2) ...

  5. PHP中mysql_fetch_row()、mysql_fetch_assoc()和mysql_fetch_array()的联系

    总是记不住或者混淆mysql_fetch_row().mysql_fetch_assoc()和mysql_fetch_array()这三个函数的朋友们注意了,今天我在这里给大家总结一下他们之间的关系, ...

  6. Java的版本历史与特性

    一个比较流行的问题是,“Java下一个版本会有什么特性呢?” .这是否是个好问题却有待商榷.在下面的内容里,我总结了至今为止的Java主要发行版中各自引入的新特性,这样做的目的是为了突出各个新特性是在 ...

  7. 《从零开始学Swift》学习笔记(Day 11)——数据类型那些事儿?

    原创文章,欢迎转载.转载请注明:关东升的博客        在我们学习语言时都会学到这种语言的数据类型,在Swift中数据类型有那些呢?整型.浮点型.布尔型.字符.字符串这些类型是一定有的,其中集合. ...

  8. 大型软件公司.net面试题

    1:a=10,b=15,在不用第三方变量的前提下,把a,b的值互换   2:已知数组int[] max={6,5,2,9,7,4,0};用快速排序算法按降序对其进行排列,并返回数组   3:请简述面向 ...

  9. docker logspout

    https://hub.docker.com/r/jplock/rsyslog/ docker pull jplock/rsyslog:8.2.2 docker run -d -p 514:514 j ...

  10. PHP定界符{}的作用

    说明: PHP解析一个字符串为"Hello,$World"时会自动解析$World. {}是方便让PHP更快的查找,它告诉PHP这里面就是变量,不用再判断是否是变量了. 例子: $ ...