九度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;
- }
- #include <stdio.h>
九度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:畅通工程
题目描述: 省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).经过调查评估,得到的统计表中列出了有可能建设公路的若干条道 ...
随机推荐
- dva解读1
1.首先定义一个app对象实现dva const app = dva({ history: createHistory(), }); // 2. Plugins app.use(createLoadi ...
- HDOJ 5044 Tree
树链剖分裸题. . .. 又要扩栈又要输入挂还卡格式....真无语 Tree Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 6553 ...
- Netdata安装和使用(Linux 性能实时监测工具)
Netdata 是一款 Linux 性能实时监测工具..以web的可视化方式展示系统及应用程序的实时运行状态(包括cpu.内存.硬盘输入/输出.网络等linux性能的数据). Netdata文档地址: ...
- Linux下OpenOffice的安装与启动
公司项目需求中增加了文档预览功能,所以采用了OpenOffice提供的将office文件转换为pdf的工具.那么我们的程序运行在服务器端,服务器系统版本多是Linux,因此有必要记录下Linux下Op ...
- jQuery 文档操作方法(append)
这些方法对于 XML 文档和 HTML 文档均是适用的,除了:html(). 一.append() 方法 append() 方法在被选元素的结尾(仍然在内部)插入指定内容. 例子: <html& ...
- mongodb基础操作
查询选择器>db.customers.find({age:{$lt:102}})查询age小于102的数据$lte表示小于或等于$gt表示大于$gte表示大于或等于>db.customer ...
- Java基础 - 获取随机数
使用方法 package com.demo5; import java.util.Random; /* * 使用步骤: * A:导包 * import java.util.Random; * B:创建 ...
- setlocale(LC_ALL, ""); 取值为空字符串" "(注意,不是NULL),则locale与本地环境所使用的编码方式相同(在本地化时,应该很有用);
在C运行库提供的多字节字符-宽字符转换函数:mbstowcs()/wcstombs()中,需要用到全局变量locale( locale encoding ),以指定多字节字符的编码类型 1. 功能: ...
- Delphi里的Windows消息(可查MSDN指定位置)
各种控件的通知消码和控制消息可由MSDN-> Platform SDK-> User Interface Services->Windows User Interface->C ...
- 使用Kotlin开发Android应用(II):创建新工程
在基本了解什么是Kotlin以及Kotlin可以做什么之后,接下来就到了配置Android Studio并使用Kotlin开发Android apps的时候了.首次配置Android Studio需要 ...