时间限制: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. WPF数据模板样式选择器

    在使用数据模板样式选择器时,不能设置ItemContainerStyle的属性值,如果设置了该值,那么数据模板样式选择器会失去作用. 在使用数据模板样式选择器时,首先要创建数据模板样式选择器对象,此对 ...

  2. Eclipse调试部分手机不显示日志问题解决

    在拨号键盘输入一串指令,然后会进入到工程模式,最后可以在Log设置里面设置了. 华为:*#*#2846579#*#* 酷派:*20121220#

  3. Python简单分布式爬虫

    分布式爬虫采用主从模式.主从模式是指由一台主机作为控制节点,负责管理所有运行网络爬虫的主机(url管理器,数据存储器,控制调度器),爬虫只需要从控制节点哪里接收任务,并把新生成任务提交给控制节点.此次 ...

  4. hdu 4419 线段树 扫描线 离散化 矩形面积

    //离散化 + 扫描线 + 线段树 //这个线段树跟平常不太一样的地方在于记录了区间两个信息,len[i]表示颜色为i的被覆盖的长度为len[i], num[i]表示颜色i 『完全』覆盖了该区间几层. ...

  5. Dictionary——通过value找Key

    Dictionary<string, string> dic = GetRoleDescriptions(); string key = dic.FirstOrDefault(x => ...

  6. 统计TCP网络连接情况

    #!/bin/bash metric=$1 tmp_file=/tmp/tcp_status.txt /bin/netstat -an|awk '/^tcp/{++S[$NF]}END{for(a i ...

  7. 多进程端口监听 How nginx processes a request Server names

    网络编程( 六):端口那些事儿 - 知乎专栏  https://zhuanlan.zhihu.com/p/20365900 不停服务reload.restart 多进程端口监听 我们都有一个计算机网络 ...

  8. hctf2016 fheap学习(FreeBuf发表的官方解法)

    目录 如何在二次释放前修改函数指针 修改函数指针流程 如何获得进程的加载基址 puts函数的调用 如何获取system函数地址 说一下用DlyELF函数 如何调用system函数 ROP需要的栈布局 ...

  9. iOS 静态库的制作

    按照公司的想法 要开发一款SDK,于是就抽空学习一下静态枯的制作过程. 在IOS中有静态库和动态库的区分,下面我们就来详细介绍一下. 一.静态库和动态库的详细介绍. 我们平时的工程中或多或少都要引入第 ...

  10. 解决Initializing Java Tooling 和 Initializing Java Tooling卡死问题

    遇到了如题的问题,使用如下方法解决了 工作中eclipse崩溃,再次启动后,状态栏一直显示  Initializing Javascript Tooling . 解决方案: 删除\workspace\ ...