• luogu1022计算器的改良[noip2000提高组Day1 T1]


    题目背景

      NCL是一家专门从事计算器改良与升级的实验室,最近该实验室收到了某公司所委托的一个任务:需要在该公司某型号的计算器上加上解一元一次方程的功能。实验室将这个任务交给了一个刚进入的新手ZL先生。

    题目描述

    为了很好的完成这个任务,ZL先生首先研究了一些一元一次方程的实例:

    4+3x=8

    6a-5+1=2-2a

    -5+12y=0

    ZL先生被主管告之,在计算器上键入的一个一元一次方程中,只包含整数、小写字母及+、-、=这三个数学符号(当然,符号“-”既可作减号,也可作负号)。方程中并没有括号,也没有除号,方程中的字母表示未知数。

    你可假设对键入的方程的正确性的判断是由另一个程序员在做,或者说可认为键入的一元一次方程均为合法的,且有唯一实数解。

    输入输出格式

    输入格式:

    一个一元一次方程。

    输出格式:

    解方程的结果(精确至小数点后三位)。

    输入输出样例

    输入样例#1:
    6a-5+1=2-2a
    
    输出样例#1:
    a=0.750

    简单模拟,看起来好像处理的东西,像方程两侧消元什么的挺复杂,其实转化成系数的加减和字符串读写处理就很简单了。

    #include<cstdio>
    #include<string>
    #include<iostream>
    using namespace std;
    string s;
    double lt,rt;
    int u[3],n[3],k,t=0,alp;
    void cal(bool kind)
    {
        int tmp=0;
        bool flag=0;
        while('0'<=s[k]&&s[k]<='9'){
            flag=1;
            tmp=tmp*10+s[k]-'0';
            k++;
        }
        if(!flag)tmp=1;
        if(kind)tmp=-tmp;
        if('a'<=s[k]&&s[k]<='z'){
            u[t]+=tmp;
            alp=k;
            k++;
        }
        else n[t]+=tmp;
    }
    int main()
    {
        cin>>s;
        for(k=0;k<s.length();){
            if(s[k]=='='){
                t=1;
                k++;
                continue;
            }
            if(s[k]=='-'){
                k++;
                cal(1);
            }
            else{
                if(s[k]=='+')k++;
                cal(0);
            }
        }
        lt=n[0]-n[1];
        rt=u[1]-u[0];
        printf("%c=%.3lf
    ",s[alp],lt/rt);
        return 0;
    }
    


  • 相关阅读:
    laravel框架简易对接网易163邮件
    新版PHP7安装redis扩展并在laravel中运用
    make: as86: Command not found
    Ubuntu主题美化
    Ubuntu更换阿里源
    Ubuntu配置中文输入法
    JS内利用Ajax同后端异步交互数据
    更改网页内滚动条效果
    鼠标点击烟花特效
    内存交换分区创建&文件系统观察与操作
  • 原文地址:https://www.cnblogs.com/keshuqi/p/5957696.html
Copyright © 2020-2023  润新知