【codevs 1015】计算器的改良

1015 计算器的改良 2000年NOIP全国联赛普及组
时间限制: 1 s
空间限制: 128000 KB
题目等级 : 白银 Silver
题解
题目描述 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 
#include 
#include 
#include 
#include 
using namespace std;
const int MAXN = 105;
char s[MAXN],c[MAXN],news;
int n[MAXN],ks[MAXN],se;
int lens,k = -1,x = 0,y = 0;
int len2 = 0;
bool flag = false,xccc = false;
double num1 = 0,num2 = 0;

int main()
{
    cin >> s;
    lens = strlen(s);
    for(int i = 0; i < lens; i ++)
    {
        if(i == lens - 1) xccc = true;
        if((k != -1 && (s[i] == '+' || s[i] == '-' || s[i] == '=')) || xccc == true)
        {
            len2 = 0;flag = false;
            memset(c,0,sizeof(c));
            if(xccc == true)
            {
                for(int j = i - k - 1; j < i + 1; j ++)
                {
                    if('a' > s[j] || s[j] > 'z')    c[len2] = s[j],len2 ++;
                    else    news = s[j],flag = true;
                }
            }
            else
            {
                for(int j = i - k - 1; j < i; j ++)
                {
                    if('a' > s[j] || s[j] > 'z')    c[len2] = s[j],len2 ++;
                    else    news = s[j],flag = true;
                }
            }
            sscanf(c,"%d",&n[x]);
            memset(c,0,sizeof(c));
            if(flag == true)    ks[y] = x,y ++;
            x ++,k = -1;
        }
        k ++;
        if(s[i] == '=') se = x,k = -1;
    }
    for(int i = 0; i < y; i ++)
    {
        if(ks[i] < se)  num1 += n[ks[i]];
        else    num1 -= n[ks[i]];
    }
    for(int i = 0; i < x; i ++)
    {
        if(i < se)  num2 -= n[i];
        else    num2 += n[i];
    }
    num2 += num1;
    printf("%c=%.3lf",news,num2 / num1);
    return 0;
}

你可能感兴趣的:(===基础===)