题目要求:

解方程,给定一个字符串,代表一个一元一次方程。如果有解求解,输出格式“x=数字“,如果解的个数无穷,输出 “infinite solutions”。如果没有解输出“no solution”

字符串长度不超过 256 。样例:
输入:
10x-2x-8=4x+7+x

输出:
x=5

思路:

1.解题原则,解题步骤中应当尽量减少逻辑思考,可以多设置几个参数,数组。简化思考与处理问题的复杂度。

2.模拟题,字符串形式读入后,逐个字符处理。设置coe,con分别表示x的系数和常数,    进行累加,注意x前系数为+1和-1时要能够正确处理,另外若表达式最后是数字,注意地址越界问题。

4.参考输入

x-x+2=0------->输出:no solution

2x-1=x+3------->输出:x=4

2x-2x-1+1=0---------输出:infinite solutions

2x-4x+8-4+x=-x+2x-1+9-------->输出:x=-2

参考代码:

#include<cstdio>
#include<iostream>
#include<string>
using namespace std;
int main()
{string s;int coe=0,con=0,tag=1; //tag标记在等号左边还是右边getline(cin,s);int i=0;while(i<s.size()){if(s[i]=='-'||s[i]=='+'){int t=0,flag=1;        //flag标记直接碰到-x和x的情况if(s[i]=='-') flag=-1;i++;while(i<s.size()&&s[i]>='0'&&s[i]<='9'){t=t*10+s[i]-'0';i++;}if(i<s.size()&&s[i]=='x'&&t==0) {        //x前系数是1的情况coe+=flag*tag; i++;}else if(i<s.size()&&s[i]=='x'){coe+=t*flag*tag;             //别忘了要*flagi++;}elsecon+=t*flag*tag;                //t*flag}else if(s[i]>='0'&&s[i]<='9'){int t=0;        while(i<s.size()&&s[i]>='0'&&s[i]<='9'){t=t*10+s[i]-'0';i++;}if(i<s.size()&&s[i]=='x') {        //要加上i<边界,否则最后一个字符是常数会越界异常coe+=t*tag;i++;}elsecon+=t*tag;}else if(s[i]=='x'){coe+=tag;i++;}else if(s[i]=='='){tag=-1;i++;}}if(coe==0&&con==0) printf("infinite solutions\n");else if(coe!=0&&con%coe==0) printf("x=%d\n",-con/coe);else printf("no solution\n");return 0;
}

优化:

1.改用a,b两个变量代表系数和常数。

2.使用一个while()循环处理整个等式。

参考代码:

#include<cstdio>
#include<string>
#include<iostream>
using namespace std;
string str;
int main()
{cin>>str;int a=0,b=0,sym=1,i=0,flag=1;//sym表示符号,flag=1表示等式左边,flag=-1表示等式右边while(i<str.size())  {if(str[i]=='=') { flag=-1;sym=1;}  //遇到等号时,sym置1规避之前的影响else if(str[i]=='+') sym=1;else if(str[i]=='-') sym=-1;else {int t=0;while(i<str.size()&&str[i]>='0'&&str[i]<='9'){t=10*t+(str[i]-'0');++i;}if(i>=str.size()) {b-=t*sym;break;}  //当表达式最后是数字时单独判断,如4x-1=2x+3,否则会越界  if(str[i]=='x'&&t==0) a+=sym*flag;  //x前系数为正负1时单独判断处理else if(str[i]=='x')  a+=t*sym*flag;  //处理系数else {b+=t*sym*flag;continue;}  //处理常数}++i;}if(a==0&&b==0) printf("infinite solutions\n");else if(a!=0&&b%a==0) printf("x=%d\n",-b/a);else printf("no solution\n");return 0;
}

2018复旦大学计算机硕士招生复试上机题(2)-解一元一次方程相关推荐

  1. 牛客网 -- 计算机历年考研复试上机题 -- 手机键盘

    题目描述 按照手机键盘输入字母的方式,计算所花费的时间 如:a,b,c都在"1"键上,输入a只需要按一次,输入c需要连续按三次. 如果连续两个字符不在同一个按键上,则可直接按,如: ...

  2. 浙大计算机学院考研复试上机试题,浙大计算机学院考研复试上机试题.doc

    浙江大学计算机复试上机2005-2007 (由林子整理 QQ:170479150) 2005年浙江大学计算机学院考研复试上机试题及参考答案(1/5) 第一题:A+B(10分) [结题] 题目要求:读入 ...

  3. 计算机专业考研复试上机算法学习

    计算机专业考研复试上机算法学习 这篇博客是博主在准备可能到来的线下上机复试基于王道机试指南的学习,将各道习题链接和代码记录下来,这篇博客权且当个记录. 文章目录 计算机专业考研复试上机算法学习 1.S ...

  4. 历年北京理工大学复试上机题

    历年北京理工大学计算机复试(上机+专业综合): http://blog.csdn.net/u014552756/article/details/78506072 2000年北理复试上机题 2001年北 ...

  5. 北京理工大学复试上机题汇总

    秉承前人精神,祝学弟学妹们顺利上岸!!!!! (00-14和16-17是我转载的别的博主的,15.18和19是我的原创.题意大都描述正确,代码只具有一定参考性,希望大家都自己实现一下) 历年北京理工大 ...

  6. 试题以文件的形式存在C语言,2016年计算机二级C语言上机题库

    2016年计算机二级C语言上机题库 一.选择题 1.下列叙述中正确的是( ). A.数据的逻辑结构与存储结构必定是一一对应的 B.由于计算机存储空间是向量式的存储结构,因此,数据的存储结构一定是线性结 ...

  7. 二级c语言上机题库及解析,2013年计算机二级C语言上机题库及答案解析(3)

    填空题 给定程序中,函数fun的功能是:在形参ss所指字符串数组中,查找含有形参substr所指子串的所有字符串并输出,若没找到则输出相应信息.ss所指字符串数组中共有N个字符串,且串长小于M.程序中 ...

  8. 8次c语言上机作业答案,计算机二级C语言上机题库及答案2017

    计算机二级C语言上机题库及答案2017 引导语:我们将要迎来2017年9月份的计算机考试,大家准备好了吗,以下是百分网小编分享给大家的计算机二级C语言上机题库及答案2017,欢迎测试! 一.填空题 给 ...

  9. 计算机二级考风考纪主题班会,计算机二级C语言上机题库及答案(100套).doc

    文档介绍: 计算机二级c语言上机题库及答案内部资料,切勿外传!填空题.第1套请补充FUN函数,FUN函数的功能是求10的阶乘.注意:部分源程序给出如下.请勿改动主函数main和其它函数中的任何内容,仅 ...

最新文章

  1. Linux 内核 4.20 圣诞发布!新增硬件支持,性能有所改进
  2. ETC核心技术团队CTO空降上海,引领高校区块链技术风潮
  3. 用jQuery作为JS对象从选项中添加选项的最佳方法是什么?
  4. 盛最多水的容器—leetcode11
  5. C# 10 新特性 —— CallerArgumentExpression
  6. 搭建VS2008+OpenCV2.1开发环境
  7. 《大道至简》周爱民读后感
  8. 如何将你的Qt项目打包安装在MeeGo系统中
  9. 搜索c盘大文件_硬核干货,如何给c盘“减肥”?
  10. CentOS 7下安装GUI图形界面
  11. QuickGUI编辑器系列---从文件中读取并解析
  12. php中正则表达式中的特殊符号
  13. 【手拉手 带你准备电赛】使用定时器中断更改PWM占空比
  14. c语言怎么写最小公倍数的函数,C语言 · 最小公倍数
  15. 三层锁机病毒的层层逆向剖析
  16. nginx之30分钟搞定nginx反向代理和负载均衡
  17. 北京三日自驾游-和狗狗的秦皇岛之旅
  18. 系统交易---战术资产配置 (Tactical Asset Allocation TAA)介绍
  19. SpringBoot中重试框架——Spring-retry与Guava-Retry
  20. hdu 4481 Time travel(高斯求期望)

热门文章

  1. 数据库快速插入大量数据
  2. 设计模式(一)----设计模式概述及UML图解析
  3. NG Toolset开发笔记--5GNR Resource Grid(50)
  4. 纵横向档次拉法的MATLAB编程
  5. Code Complete 02 - 软件隐喻
  6. 51单片机Proteus仿真+Keil工程-实验6-单片机扩展RAM6264实验
  7. 中文版《Effective C++:改善程序与设计的55个具体做法
  8. 四川农业大学ZigBee复习重点
  9. 日期匹配星座,月日匹配星座,android 星座
  10. 计算机系统修复命令提示符,Win10修复电脑的命令提示符有哪些?