SSL 1005 計算器的改良(一元一次方程求解)

2021-08-13 15:58:09 字數 2053 閱讀 3299

description

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

4+3x=8

6a-5+1=2-2a

-5+12y=0

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

input

輸入的一元一次方程。

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

output

方程的結果(精確至小數點後三位)。

sample input

6a-5+1=2-2a

sample output

a=0.750

思路(總感覺用洛谷寫題解好些。。。)

未知數的值=常數和/係數和

不過有很多細節需要注意。

解釋在**:

#include

#include

#include

using

namespace

std;

char wzs;//未知數

int i,jsg,zs,xs,m;//zs:常數和,xs:係數和,m:符號開始的位置,用於求係數,jsg:判斷是否出現過符號

short b=1;//等號左邊還是右邊

bool ok[256];//判斷當前位數是否是未知數

double ans=0;char c[256];

void

qxs(int n)

//這個是求上乙個符號到當前未知數之間的數,也就是這個未知數的係數

//如果是+,把係數加進去

if (c[j]=='-') //是-就減

}if (jg)

xs+=k*b;//特判

}void

js()

//存好符號的開始位置,並標記已出現符號

if (c[i]=='=') //如果在等號右邊,需要變號

if (c[i]==wzs) //如果這個是未知數

if (c[i-1]=='+'||c[i-1]=='='||i==0)//這裡解釋一下,如果它是第乙個未知數,且前面不是負號(前面已經排除),它的係數就是一;如果是等於號後面的第乙個未知數,它的係數也等於1

qxs(i);//如果係數不是1或-1}}

}void

qzs()

//求常數(拼音打錯了,見諒。。。)

//如果它是未知數的係數,那麼將k清0並跳過

if (c[i]<'0'||c[i]>'9') //如果它不是數,也就是是+,-或=號

//如果在等號右邊,所有的符號都會顛倒;fh重新變成+

}else k=k*10+c[i]-48;//否則將此數存下來

}zs+=k*fh*dh;//最後一次特殊處理,因為可能還有

}int

main

() wzs=c[i];//未知數

js();//求係數

qzs();//求常數

zs*=-1;//這裡解釋一下:因為我們求出的所有的值都在等號左邊,所以需要把其中一項移到右邊,根據移項變號的原理,所以要乘-1

ans=(double)zs/xs;ans*=1000;ans=floor(ans+0.5);ans/=1000.0;//四捨五入,c++是直接舍尾,所以我們先乘1000,再加0.5,之後取整,最後在除以1000就可以達到保留三位整數的目的了

printf("%c=%0.3lf",wzs,ans);//輸出

}

計算器的改良

在codevs上遇到乙個挺新穎的題目,設計演算法解一元一次方程。ncl是一家專門從事計算器改良與公升級的實驗室,最近該實驗室收到了某公司所委託的乙個任務 需要在該公司某型號的計算器上加上解一元一次方程的功能。實驗室將這個任務交給了乙個剛進入的新手zl先生。為了很好的完成這個任務,zl先生首先研究了一...

計算器的改良

2000年分割槽聯賽普級組之一 計算器的改良 time limit 1000ms memory limit 65536k total submit 179 accepted 75 description ncl是一家專門從事計算器改良與公升級的實驗室,最近該實驗室收到了某公司所委託的乙個任務 需要在...

1015 計算器的改良

題目描述 description ncl是一家專門從事計算器改良與公升級的實驗室,最近該實驗室收到了某公司所委託的乙個任務 需要在該公司某型號的計算器上加上解一元一次方程的功能。實驗室將這個任務交給了乙個剛進入的新手zl先生。為了很好的完成這個任務,zl先生首先研究了一些一元一次方程的例項 4 3x...