九度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:畅通工程
题目描述: 省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).经过调查评估,得到的统计表中列出了有可能建设公路的若干条道 ...
随机推荐
- cvsba-1.0.0/utils/test_cvsba.cpp:.......error: ‘numeric_limits’ is not a member of ‘std’... error: expected primary-expression before ‘float’....
cvsba库http://www.uco.es/investiga/grupos/ava/node/39,不知道怎么回事,记得以前编译没有错误,不知道作者是否更新了还是怎么着,新的现在有以下错误: 解 ...
- C++编译过程与内存空间
为什么须要知道C/C++的内存布局和在哪能够能够找到想要的数据?知道内存布局对调试程序很有帮助,能够知道程序运行时,究竟做了什么,有助于写出干净的代码.本文的主要内容例如以下: 源文件转换为可运 ...
- c语言行编辑程序
static.h 头文件 typedef struct bufferStatic{ char *top; char *base; int staticSize; }bufferStatic; type ...
- Gcc手册(转)
手册链接地址:http://www.shanghai.ws/gnu/gcc_1.htm GCC中文手册 GCC现在是GNU中最主要和最流行的c & c++编译器. gcc/g++在执行编译工作 ...
- tomcat访问日志分析
常使用web服务器的朋友大都了解,一般的web server有两部分日志: 一是运行中的日志,它主要记录运行的一些信息,尤其是一些异常错误日志信息 二是访问日志信息,它记录的访问的时间,IP,访问的资 ...
- 【BZOJ2555】SubString 后缀自动机+LCT
[BZOJ2555]SubString Description 懒得写背景了,给你一个字符串init,要求你支持两个操作 (1):在当前字符串的后面插入一个字符串 (2 ...
- unity坑faq
遇到的坑记录下来,大都都是听说,没有实测 1. Graphics.copyTexture,在某些机型上不支持从不同类型拷贝 2. msaa 小米mix2不支持,晓龙845 3. android4.2下 ...
- Django~表的操作
增(create , save) from app01.models import * #create方式一: Author.objects.create(name='Alvin') ...
- Jmeter关联技术
JMeter:关联步骤 <1>录制成功,回放失败了: <2>录制两个业务相同的脚本,比对差别,找到动态数据,AptDiff_1.6.zip工具 <3>找到相应请求: ...
- JS单例
s = (function S(){ var bean; function get(){ if(bean){ return bean }else{ bean = T(); return bean; } ...