codevs.1015 計算器的改良

題目描述 Description

NCL是一家專門從事計算器改良與升級的實驗室,最近該實驗室收到了某公司所委託的一個任務:需要在該公司某型號的計算器上加上解一元一次方程的功能。實驗室將這個任務交給了一個剛進入的新手ZL先生。爲了很好的完成這個任務,ZL先生首先研究了一些一元一次方程的實例:

 

   4+3x=8

   6a-5+1=2-2a

  -5+12y=0

 

ZL先生被主管告之,在計算器上鍵入的一個一元一次方程中,只包含整數、小寫字母及+、-、=這三個數學符號(當然,符號“─”既可作減號,也可作負號)。方程中並沒有括號,也沒有除號,方程中的字母表示未知數。

 

編寫程序,解輸入的一元一次方程, 將解方程的結果(精確至小數點後三位)輸出至屏幕。

 

    你可假設對鍵入的方程的正確性的判斷是由另一個程序員在做,或者說可認爲鍵入的一元一次方程均爲合法的,且有唯一實數解。

輸入描述 Input Description

一個一元一次方程

輸出描述 Output Description

方程的解

樣例輸入 Sample Input

6a-5+1=2-2a

樣例輸出 Sample Output

a=0.750

數據範圍及提示 Data Size & Hint

注意加減號都是半角


一開始覺得好難啊,後面發現模擬計算等號左右的係數和常數,發現也可以做

#include<cstdio>
#include<iostream>
#include<string>
#include<algorithm>
#include<iomanip>
using namespace std;
const int maxn = 5;
int pos,n[maxn],u[maxn],lr=0,k;
double l=0,r=0;
string s;
void cal(bool sign);
int main(){
   freopen("Text.txt","r",stdin);
    while(cin>>s){
        k=0;
        while(k<s.size()){
            if(s[k]=='-'){
                k++;
                cal(1);
                
            }
            else if(s[k]=='+'){
                k++;
                cal(0);
                
            }
            else{
                if(s[k]=='='){
                    k++;
                    lr=1;
                    continue;
                }
                cal(0);
            }
        }
        l=n[0]-n[1];
        r=u[1]-u[0];
        //cout<<n[0]<<" "<<n[1]<<endl;
        //cout<<l<<" "<<r<<endl;
        cout.setf(ios::fixed);
        double ans=l/r;
        if(ans>0)ans+=0.0005;
        else ans -= 0.0005;
        cout<<setprecision(3)<<s[pos]<<" = "<< ans <<endl;
        //printf("%.3lf",l/r+0.0005);
    }
   return 0;
}
void cal(bool sign){
    //cout<<"k = "<<k<<endl;
    //cout<<s[k]<<endl;
   bool flag=0;
   int tal=0;
   while(s[k]>='0'&&s[k]<='9'){
       flag=1;
       tal=tal*10+s[k]-'0';
       k++;
   }
   if(sign)tal=-tal;
   if(!flag)tal=1;
   if(s[k]>='a'&&s[k]<='z'){
       pos=k;
       u[lr]+=tal;
       k++;
   }
   else{
      n[lr]+=tal;
      
   }
}


發佈了87 篇原創文章 · 獲贊 0 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章