洛谷P1689--方程求解_题解
来源:互联网 发布:西班牙海鲜饭 知乎 编辑:程序博客网 时间:2024/05/29 15:48
/*
P1689 题解
字符串的使用+状态判断
*/
#include <cstdio>//头文件#include <cstring>//头文件char st[101];//st数组是一个字符类型的数组(可以用来存储字符串),接下来我们将用它来存储这个方程int main()//主函数{ int a=-1,b=-1,flag=-1,js=-2,wz=-2;//定义变量,a表示这个方程当中的第一个已知数,而b则是表示这个方程当中的第二个已知数,flag表示的是当前已经读完了多少个已知数,当flag=-1时表示没有读入任何一个或者已经读入到了一个,而在flag=0的时候则表示当前读入到了第二个已知数,请想一想,为什么在flag=0的时候可以表示两种状态,js表示的是这个算式当中使用了加法运算(即js=-1时)还是减法运算(即flag=0时),wz表示的是这个位置数在什么位置,如果wz=-1,那么就表明这个未知数在最左边,否则,当wz=0时,就表明这个未知数在中间,如果这个未知数在最右边的话,那么就可以根据js、a和b求出答案(因为有了这两个已知数就可以解这个方程了) gets(st+1);//读入这个字符串(因为读入的方程可能会有空格),所以不能够用scanf,要用gets int len=strlen(st+1);//len是用来存这个字符串的长度的 for(int i=1;i<=len;i++)//从1到len进行循环,即遍历这个字符串 { if(st[i]==' ')//如果这一位是空格(因为空格时多余的,所以要直接地进入到下一位) { continue;//直接进行下一次的循环 } if(st[i]>='0' && st[i]<='9')//如果这一位是数字 { if(flag==-1)//如果这是这个方程中的第一个未知数 { a=0;//先把这个数给清零 while(1)//一直循环(即死循环) { if(st[i]==' ')//如果这是一个多余的空格(因为在数字中间有可能有空格,所以要在这里也要加一个判断,例如:12 345这样) { i++;//那么就直接将i加1 } else if(st[i]>='0' && st[i]<='9')//否则,如果这一位上是数字 { a=a*10+st[i]-'0';//加上去(例如a=12,这一位上是'3',那么12乘以10之后就是120,再加上数字3,即'3'-'0',就可以的到123了) i++;//继续去下一位 } else//如果这一位上既不是空格又不是数字,那么就表示这个数字读入完了 { break;//跳出这个循环 } } flag=0;//改变flag的值,表示第一个给出的数(即已知数)已经读入完了 } else if(flag==0)//如果第一个数读入完了 { b=0;//那么就去读入第尔个数,然后给b初始化为0 while(1)//一直循环 { if(st[i]==' ')//去除掉多余的空格 { i++;//继续去下一位 } else if(st[i]>='0' && st[i]<='9')//如果这一位上是数字 { b=b*10+st[i]-'0';//加上去 i++;//继续去这个字符串的下一位找 } else//如果读入完了 { break;//跳出这个循环 } } } } if(st[i]=='+')//如果这个方程中用到了加法运算 { js=-1;//那么就改js的值为-1 } else if(st[i]=='-')//否则如果这个方程中用到了减法运算 { js=0;//否则就将js的值改为0 } if(st[i]=='?')//如果这一位上是要求的未知数 { if(a==-1 && b==-1)//如果这个未知数在左边 { wz=-1;//那么就将wz的值改为-1 } else if(a!=-1 && b==-1)//否则如果这个未知数在中间 { wz=0;//那么就将wz的值改为0 } else if(a!=-1 && b!=-1)//否则如果这个未知数在右边 { if(js==-1)//如果在这个方程中用到了加法运算 { printf("%d",a+b);//输出答案 } else if(js==0)//否则如果在这个方程中用到了减法运算 { printf("%d",b-a);//输出答案 } return 0;//结束程序(因为已经把答案输出了) } } } if(wz==-1)//如果这个未知数在左边 { if(js==-1)//如果在这个方程中用到了加法运算 { printf("%d",b-a);//输出答案 } else if(js==0)//否则如果在这个方程中用到了减法运算 { printf("%d",a+b);//输出答案 } } else if(wz==0)//否则如果这个未知数在中间 { if(js==-1)//如果在这个方程中用到了加法运算 { printf("%d",b-a);//输出答案 } else if(js==0)//否则如果在这个方程中用到了减法运算 { printf("%d",a-b);//输出答案 } } return 0;//结束程序}
阅读全文
0 0
- 洛谷P1689--方程求解_题解
- 洛谷P1024 一元三次方程求解 题解
- [VB.NET源码]36_求解方程
- vijos p1116(codevs 1038 )一元三次方程求解 题解
- NOI_OPENJUDGE_2.4_7891:一元三次方程求解 题解
- 求解方程
- 方程求解
- 方程求解
- 求解方程
- 求解方程
- 方程求解
- 方程求解
- 洛谷1024 一元三次方程求解
- 【分治】洛谷 P1024 一元三次方程求解
- 洛谷 [P1024]一元三次方程求解
- (洛谷1024)一元三次方程求解
- hdu_2348_三分求解最值方程_数学题_少用tan
- [来自洛谷P1082hongweixin的题解]同余方程/扩展欧几里得算法求解方法
- 【04】Bootstrap排版
- C# 可访问性不一致: 参数类型“XXX”的访问性低于方法“XXX”
- arm-linux-gcc
- Android学习笔记九之Intent
- 如何用打出反引号shell中
- 洛谷P1689--方程求解_题解
- 如何查看linux系统版本
- 常用排序之希尔排序法
- js 一些基础的理解
- python使用gensim进行文本相似度计算
- nginx location语法使用
- GDAL 编译(转)
- Github Pages 与域名关联简明教程
- System.exit(0)和System.exit(1)区别