• NOIP2000计算器的改良


    题目描述

    NCL是一家专门从事计算器改良与升级的实验室,最近该实验室收到了某公司所委托的一个任务:需要在该公司某型号的计算器上加上解一元一次方程的功能。实验室将这个任务交给了一个刚进入的新手ZL先生。为了很好的完成这个任务,ZL先生首先研究了一些一元一次方程的实例:
     
       4+3x=8
       6a-5+1=2-2a
      -5+12y=0
     
    ZL先生被主管告之,在计算器上键入的一个一元一次方程中,只包含整数、小写字母及+、-、=这三个数学符号(当然,符号“─”既可作减号,也可作负号)。方程中并没有括号,也没有除号,方程中的字母表示未知数。
          
    编写程序,解输入的一元一次方程, 将解方程的结果(精确至小数点后三位)输出至屏幕。
     

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

    输入

    输入如题义所述的一个一元一次方程。

    输出

    输出只有一个实数,为方程的解。

    样例输入

    6a-5+1=2-2a

    样例输出

    a=0.750
    这道题是暑假做的第一道NOIP,应该说很快就把大部分搞好,但是由于不细致或者没想到,我改了好多个小时,忘了读数
    这道题只要用纯模拟就OK了

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    using namespace std;
    char a[101],c='2';
    int main(){
    float n,wzsz=0.0,qz=0.0;
    int j=0;
    scanf("%s",&a);
    int len,blen;
    len=strlen(a);
    for(int i=0;i<len;i++){
    if(a[i]=='=')blen=i;
    if((c=='2')&&(a[i]!='+'&&a[i]!='-'&&a[i]!='='&&!(a[i]>='0'&&a[i]<='9')))c=a[i];
    }
    for(int i=0;i<len;i++){
    n=0.0;
    j=0;
    while(a[i]>='0'&&a[i]<='9'){n=n*10+a[i]-'0';++i;j++;}
    if(a[i]==c){
    if((a[i-j-1]=='+'||i-j-1<0)&&i-j-1<blen)wzsz+=n;
    if((a[i-j-1]=='+'||i-j-1<0||a[i-j-1]=='=')&&i-j-1>=blen)wzsz-=n;
    if((a[i-j-1]=='-')&&i-j-1<blen)wzsz-=n;
    if((a[i-j-1]=='-')&&i-j-1>blen)wzsz+=n;
    }else{
    if((a[i-j-1]=='+'||i-j-1<0)&&i-j-1<blen)qz-=n;
    if((a[i-j-1]=='+'||i-j-1<0||a[i-j-1]=='=')&&i-1>=blen)qz+=n;
    if((a[i-j-1]=='-')&&i-j-1<blen)qz+=n;
    if((a[i-j-1]=='-')&&i-j-1>blen)qz-=n;
    }
    }
    float sz=qz/wzsz;
    // cout<<wzsz<<endl<<qz;
    printf("%c=%.3f",c,sz);
    return 0;
    }



  • 相关阅读:
    Android OpenGL(2)
    Bootloader:BareBox
    Android OpenGL(1)
    Android脚本环境
    Android用户界面开发:事件处理
    S5PV210按键控制LED
    S5PV210控制蜂鸣器
    Windows Vista/Windows 7上安装wince5.0/6.0及SDK模拟器
    Makefile
    每日英语:Apps Reorder the Job Landscape
  • 原文地址:https://www.cnblogs.com/linzeli/p/7260409.html
Copyright © 2020-2023  润新知