时间限制:1 秒

内存限制:32 兆

特殊判题:

提交:2799

解决:633

题目描述:

设计一个二次方程计算器

输入:

每个案例是关于x的一个二次方程表达式,为了简单,每个系数都是整数形式。

输出:

每个案例输出两个实数(由小到大输出,中间由空格隔开),保留两位小数;如果无解,则输出“No Solution”。

样例输入:
  1. x^2+x=3x+4
样例输出:
  1. -1.24 3.24
来源:
2011年上海交通大学计算机研究生机试真题
因为是多组输入,导致WA一发!
分析:统计x^2的系数,统计x的系数,统计常数和。转换成ax^2+bx+c=0的形式,公式法求解。
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include <ctype.h>
  5. #include <math.h>
  6. #include <iostream>
  7. #include <string>
  8. #include <algorithm>
  9.  
  10. using namespace std;
  11.  
  12. int main()
  13. {
  14. char s[200];
  15. int i, j, len;
  16. while(scanf("%s", s)!=EOF)
  17. {
  18. len=strlen(s);
  19.  
  20. int a=0, b=0, c=0;
  21. int A=0, B=0, C=0;
  22.  
  23. int pos;
  24.  
  25. for(i=0; i<len; i++){
  26. if(s[i]=='='){
  27. pos=i; break;
  28. }
  29. }//先找到到=
  30.  
  31. for(i=0; i+2<pos; i++){
  32. if(s[i]=='x' && s[i+1]=='^' && s[i+2]=='2'){
  33. if(i-1==-1){ a=a+1; }
  34. else if(i-1>-1){
  35. int jin=1;
  36. int cur=0;
  37. j=i-1;
  38. while(isdigit(s[j]) && j>=0){
  39. cur=cur+(s[j]-48)*jin;
  40. jin=jin*10;
  41. j--;
  42. }
  43. if(cur==0) cur=1;
  44. if(j>=0 && s[j]=='-') cur=-cur;
  45. a+=cur;
  46. }
  47. }
  48. }
  49. for(i=pos+1; i+2<len; i++){
  50. if(s[i]=='x' && s[i+1]=='^' && s[i+2]=='2'){
  51. if(i-1==pos){ A=A+1; }
  52. else if(i-1>pos){
  53. int jin=1;
  54. int cur=0;
  55. j=i-1;
  56. while(isdigit(s[j]) && j>pos){
  57. cur=cur+(s[j]-48)*jin;
  58. jin=jin*10;
  59. j--;
  60. }
  61. if(cur==0) cur=1;
  62. if(j>pos && s[j]=='-') cur=-cur;
  63. A+=cur;
  64. }
  65. }
  66. }
  67. //printf("%d\n", a-A);
  68.  
  69. for(i=0; i<pos; i++){
  70. if(s[i]=='x' && s[i+1]!='^'){//这一定是x的一次方
  71. int jin=1;
  72. int cur=0;
  73. j=i-1;
  74. while(isdigit(s[j]) && j>=0){
  75. cur=cur+jin*(s[j]-48);
  76. jin=jin*10;
  77. j--;
  78. }
  79. if(cur==0) cur=1;
  80. if(j>=0 && s[j]=='-') cur=-cur;
  81. b+=cur;
  82. }
  83. }
  84.  
  85. for(i=pos+1; i<len; i++){
  86. if(s[i]=='x'){
  87. if(i+1<len ){
  88. if(s[i+1]!='^'){
  89. int jin=1;
  90. int cur=0;
  91. j=i-1;
  92. while(isdigit(s[j]) && j>pos){
  93. cur=cur+jin*(s[j]-48);
  94. jin=jin*10;
  95. j--;
  96. }
  97. if(cur==0) cur=1;
  98. if(j>pos && s[j]=='-') cur=-cur;
  99. B+=cur;
  100. }
  101. }else{
  102. int jin=1;
  103. int cur=0;
  104. j=i-1;
  105. while(isdigit(s[j]) && j>pos){
  106. cur=cur+jin*(s[j]-48);
  107. jin=jin*10;
  108. j--;
  109. }
  110. if(cur==0) cur=1;
  111. if(j>pos && s[j]=='-') cur=-cur;
  112. B+=cur;
  113. }
  114. }
  115. }
  116. //printf("%d\n", b-B);
  117.  
  118. for(i=0; i<=pos; i++){
  119. if(s[i]=='+'||s[i]=='-'||s[i]=='='){
  120. int jin=1;
  121. int cur=0;
  122. j=i-1;
  123. while(isdigit(s[j]) && j>=0){
  124. cur=cur+jin*(s[j]-48);
  125. jin=jin*10;
  126. j--;
  127. }
  128. if(j>=0 && s[j]=='^') cur=0;
  129. if(j>=0 && s[j]=='-') cur=-cur;
  130. c+=cur;
  131. }
  132. }
  133. for(i=pos+1; i<len; i++){
  134. if(s[i]=='+' || s[i]=='-'){
  135. int jin=1;
  136. int cur=0;
  137. j=i-1;
  138. while(isdigit(s[j]) && j>pos){
  139. cur=cur+jin*(s[j]-48);
  140. jin=jin*10;
  141. j--;
  142. }
  143. if(j>pos && s[j]=='^') cur=0;
  144. if(j>pos && s[j]=='-') cur=-cur;
  145. C+=cur;
  146. }
  147. }
  148. if(isdigit(s[len-1])){
  149. int jin=1;
  150. int cur=0;
  151. j=i-1;
  152. while(isdigit(s[j]) && j>pos){
  153. cur=cur+jin*(s[j]-48);
  154. jin=jin*10;
  155. j--;
  156. }
  157. if(j>pos && s[j]=='^') cur=0;
  158. if(j>pos && s[j]=='-') cur=-cur;
  159. C+=cur;
  160. }
  161. //printf("%d\n", c-C);
  162.  
  163. a=a-A;
  164. b=b-B;
  165. c=c-C;
  166. double dd=b*b-4*a*c;
  167. if(dd<0){
  168. printf("No Solution\n");
  169. }else{
  170. double ans;
  171. ans=(-b-sqrt(b*b-4*a*c))/(2.0*a);
  172. printf("%.2lf ", ans);
  173. ans=(-b+sqrt(b*b-4*a*c))/(2.0*a);
  174. printf("%.2lf\n", ans);
  175. }
  176.  
  177. }
  178. return 0;
  179. }

  

九度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. dva解读1

    1.首先定义一个app对象实现dva const app = dva({ history: createHistory(), }); // 2. Plugins app.use(createLoadi ...

  2. HDOJ 5044 Tree

    树链剖分裸题. . .. 又要扩栈又要输入挂还卡格式....真无语 Tree Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 6553 ...

  3. Netdata安装和使用(Linux 性能实时监测工具)

    Netdata 是一款 Linux 性能实时监测工具..以web的可视化方式展示系统及应用程序的实时运行状态(包括cpu.内存.硬盘输入/输出.网络等linux性能的数据). Netdata文档地址: ...

  4. Linux下OpenOffice的安装与启动

    公司项目需求中增加了文档预览功能,所以采用了OpenOffice提供的将office文件转换为pdf的工具.那么我们的程序运行在服务器端,服务器系统版本多是Linux,因此有必要记录下Linux下Op ...

  5. jQuery 文档操作方法(append)

    这些方法对于 XML 文档和 HTML 文档均是适用的,除了:html(). 一.append() 方法 append() 方法在被选元素的结尾(仍然在内部)插入指定内容. 例子: <html& ...

  6. mongodb基础操作

    查询选择器>db.customers.find({age:{$lt:102}})查询age小于102的数据$lte表示小于或等于$gt表示大于$gte表示大于或等于>db.customer ...

  7. Java基础 - 获取随机数

    使用方法 package com.demo5; import java.util.Random; /* * 使用步骤: * A:导包 * import java.util.Random; * B:创建 ...

  8. setlocale(LC_ALL, ""); 取值为空字符串" "(注意,不是NULL),则locale与本地环境所使用的编码方式相同(在本地化时,应该很有用);

    在C运行库提供的多字节字符-宽字符转换函数:mbstowcs()/wcstombs()中,需要用到全局变量locale( locale encoding ),以指定多字节字符的编码类型 1. 功能: ...

  9. Delphi里的Windows消息(可查MSDN指定位置)

    各种控件的通知消码和控制消息可由MSDN-> Platform SDK-> User Interface Services->Windows User Interface->C ...

  10. 使用Kotlin开发Android应用(II):创建新工程

    在基本了解什么是Kotlin以及Kotlin可以做什么之后,接下来就到了配置Android Studio并使用Kotlin开发Android apps的时候了.首次配置Android Studio需要 ...