CODE 1015 计算器的改良
2014-12-05 16:31
169 查看
http://codevs.cn/problem/1015/
题意是求解一个一元一次方程组,只包含小写字母,数字,+,—,= 。求出最后的解即可。负号还可以做减号。
我是用x保存变量前的系数,y保存整数的结果,等于放到等式一边来考虑。
题意是求解一个一元一次方程组,只包含小写字母,数字,+,—,= 。求出最后的解即可。负号还可以做减号。
我是用x保存变量前的系数,y保存整数的结果,等于放到等式一边来考虑。
#include <cstdio> #include <cstring> int main() { //freopen("a.txt","r",stdin); char s[100]; char c; double x=0,y=0,ans=0,flag=1; //ans存储当前数值 ,flag表示在等式左边还是右边,x表示变量的大小,y表示整数的结果 int cnt=1; //cnt表示当前的数正还是负 scanf("%s",s); int len=strlen(s); if(s[0]=='-') cnt=-1; //判断第一个字符 else if(s[0]>='a'&&s[0]<='z') { x+=1; c=s[0];} //是字母的话 else ans=ans*10+s[0]-'0'; //是数字 for(int i=1;i<len;i++) { // printf("%.2lf %d %.2lf %.2lf\n",ans,cnt,x,y); if(s[i]>='a'&&s[i]<='z') //是字母就把 ans的值加到x里面去 同时c表示变量是哪个字母 { c=s[i]; x+=cnt*flag*ans; ans=0; cnt=1; } else if(s[i]>='0'&&s[i]<='9') { ans=ans*10+s[i]-'0'; } else { if(ans) //数字加到y上面去 { y+=cnt*flag*ans; ans=0;cnt=1; } if(s[i]=='-') cnt=-1; else if(s[i]=='+') cnt=1; else if(s[i]=='=') flag=-1; } } if(s[len-1]>='0'&&s[len-1]<='9') y+=cnt*flag*ans; //还要注意最后是整数的情况没有处理 // printf("%.2lf\n",ans); //printf("%.2lf %.2lf\n",x,y); ans=y/x; //还有等于0的情况 if(ans==0) printf("0.000\n"); else printf("%c=%.3lf\n",c,-1*y/x); return 0; }
相关文章推荐
- NOIP 2000 计算器的改良 解题报告
- 【codevs 1015】计算器的改良
- CODE-1015 计算器的改良
- CODE[VS]1015 计算器的改良
- SSL_1005 计算器的改良(一元一次方程求解)
- NOIP2000计算器的改良
- noip2000-计算器的改良 2008.11.5
- luogu1022计算器的改良[noip2000提高组Day1 T1]
- 洛谷 P1022 计算器的改良
- CODEVS 1015 计算器的改良
- noip2000计算器的改良 (模拟,解一元一次方程)
- luogu1022计算器的改良[noip2000提高组Day1 T1]
- 【洛谷 1022】 计算器的改良
- 洛谷 P1022 计算器的改良
- 计算器的改良 2000年NOIP全国联赛普及组
- [luoguP1022] 计算器的改良(模拟)
- 洛谷P1022 计算器的改良
- 洛谷P1022 计算器的改良
- 【NOIP提高组系列】(番外)NOIP2000计算器改良
- NOIP2000普及组 计算器的改良 Codevs1015 字符串复杂处理