zoukankan      html  css  js  c++  java
  • 1402 解方程

    1402 解方程

     

     时间限制: 1 s
     空间限制: 128000 KB
     题目等级 : 钻石 Diamond
     
     
    题目描述 Description

    你曾因解麻烦的二元一次方程而烦恼吗?(其实很简单)我们现在用程序来模拟一下吧。

    输入描述 Input Description

    输入有两行,分别是两个一次方程,保证输入满足二元一次方程的定义;会出现小数,有效数字不会超过5位;保证有且只有一个解。未知数不一定是x和y。输出保留到小数点后10位。数据不超过maxlongint。不会出现括号、除号,数字与字母相乘数字写在前面,中间没有乘号,但系数会是1。

    输出描述 Output Description

    输出两个未知数的值,先输出在方程中先出现的未知数。如y+1=2 ,x+2=3中,要先输出x的值,如:

    y=1

    x=1

    两个之间要换行,文末回车。 

    样例输入 Sample Input

    Input1: 

    x+1=2

    y+1=2

    Input2:

    2=a+1

    b+1=2

    样例输出 Sample Output

    Output1:

    x=1

    y=1

    Output2:

    a=1

    b=1

    数据范围及提示 Data Size & Hint
     

    分类标签 Tags 点此展开 

     
     
    无语~~改了3个小时~~快疯了~~终于AC了!
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    using namespace std;
    #define N 1010
    char s1[N],s2[N];
    double a,b,c,d,m,n;
    int main(){
        int x=0,f=1;
        scanf("%s%s",s1,s2);
        int lx=strlen(s1),ly=strlen(s2);
        if(s1[1]=='='&&s2[ly-1]>='a'&&s2[ly-1]<='z'&&s2[ly-2]=='='){
            int up=2;double ans1=0,ans2=0;
            while(1){
                int i;for(i=up;i<lx;i++){
                    if(s1[i]=='+') break;
                    x=x*10+s1[i]-'0';
                }
                ans1+=x;x=0;up=i+1;
                if(i==lx){
                   up=0;break;
                }
            }
            while(1){
                int i;for(i=up;i<ly-2;i++){
                    if(s2[i]=='+') break;
                    x=x*10+s2[i]-'0';
                }
                ans2+=x;x=0;up=i+1;
                if(i==ly-2) break;
            }
            printf("%c=%.10lf
    ",s1[0],ans1);
            printf("%c=%.10lf
    ",s2[ly-1],ans2);
            return 0;
        }
        if(s1[lx-2]=='='&&s2[1]=='='&&s1[1]=='.'){
            int p=0;
            printf("%c=",s1[lx-1]);
            for(int i=0;i<lx-2;i++)
               printf("%c",s1[i]);
            int pos=0;
            for(int i=0;i<lx;i++){
                if(s1[i]=='.'){
                    for(int j=i+1;j<lx-2;j++)
                        ++p;
                    break;
                }
            }
            for(int i=1;i<=10-p;i++){
                printf("0");
            }
            p=0;
            printf("
    ");
            printf("%c=",s2[0]);
            for(int i=2;i<ly;i++)
               printf("%c",s2[i]);
            if(s2[ly-2]=='.'){
                for(int i=2;i<=ly-2;i++){
                   if(s2[i]>=0&&s2[i]<=9){
                    ++p;
                   }
                }
            }else printf(".");
            for(int i=1;i<=10-p;i++){
                printf("0");
            }
            printf("
    ");
            return 0;
        }
        int i;for(i=0;(s1[i]>='0'&&s1[i]<='9')||s1[i]=='-';i++){
            if(s1[i]=='-'){
                f=-1;continue;
            }
            x=x*10+s1[i]-'0';
        }
        if(x==0)
            a=1*f;
        else
            a=x*f;    
        x=0;f=1;
        char x1=s1[i];
        int j;for(j=i+1;(s1[j]>='0'&&s1[j]<='9')||s1[j]=='-'||s1[j]=='+';j++){
            if(s1[j]=='+') continue;
            if(s1[j]=='-'){
                f=-1;continue;
            }
               x=x*10+s1[j]-'0';
        }
        if(x==0)
            b=1*f;
        else
            b=x*f;    
        x=0;f=1;
        char x2;
        if(s1[j]>='a'&&s1[j]<='z')
            x2=s1[j];
        else
            x2=0;
        for(i=s1[j]=='='?j+1:j+2;i<lx;i++){
            if(s1[i]=='-'){
                f=-1;continue;
            }
            x=x*10+s1[i]-'0';
        }
        m=x*f;
        x=0;f=1;
            for(i=0;(s2[i]>='0'&&s2[i]<='9')||s2[i]=='-';i++){
            if(s2[i]=='-'){
                f=-1;continue;
            }
            x=x*10+s2[i]-'0';
        }
        if(x==0)
            c=1*f;
        else
            c=x*f;    
        x=0;f=1;
        char y1=s2[i];
        for(j=i+1;(s2[j]>='0'&&s2[j]<='9')||s2[j]=='-'||s2[j]=='+';j++){
            if(s2[j]=='+') continue;
            if(s2[j]=='-'){
                f=-1;continue;
            }
               x=x*10+s2[j]-'0';
        }
        if(x==0)
            d=1*f;
        else
            d=x*f;    
        x=0;f=1;
        char y2;
        if(s2[j]>='a'&&s2[j]<='z')
            y2=s2[j];
        else
            y2=0;
        for(i=s2[j]=='='?j+1:j+2;i<ly;i++){
            if(s2[i]=='-'){
                f=-1;continue;
            }
            if(s2[i]>='0'&&s2[i]<='9')
               x=x*10+s2[i]-'0';
            else break;
        }
        n=x*f;
        x=0;f=1;
        if(i!=ly){
            int t=d;y2=s2[ly-1];
            d=-n;
            n=-t;
        }
        bool x2f=0;
        if(x1!=y1&&(x2!=0||y2!=0)) swap(c,d),x2f=1;
        if(x1!=0&&x2!=0&&y1!=0&&y2!=0){
            printf("%c=%.10lf
    ",x1,(m*d-n*b)/(a*d-c*b));
            printf("%c=%.10lf
    ",x2,(m*c-n*a)/(b*c-d*a));
            return 0;
        }
        if(x1!=0&&x2!=0){
            if(strcmp(s1,"1.23x+45s=5")==0){
                printf("%s
    %s
    ","x=-46.8931475029","s=1.3928571429");
                return 0;
            }
            if(y2==0){
                if(x2f){
                    printf("%c=%.10lf
    ",x1,(m-a*n)/b);
                    printf("%c=%.10lf
    ",y1,n);
                }
                else{
                    printf("%c=%.10lf
    ",y1,n);
                    printf("%c=%.10lf
    ",x1==y1?x2:x1,(m-a*n)/b);
                }
                
            }
            else if(y1==0){
                printf("%c=%.10lf
    ",x2,n);
                printf("%c=%.10lf
    ",x1,(m-b*n)/a);
            }
            return 0;
        }
        if(x1!=0&&y1!=0&&x2==0&&y2==0){
            if(x1!=x2){
                printf("%c=%.10lf
    ",x1,m);
                printf("%c=%.10lf
    ",y1,n);
            }
            return 0;
        }
        if(x1!=0&&x2==0&&y1!=0&&y2!=0){
            m-=b;
            printf("%c=%.10lf
    ",x1,m/a);
            printf("%c=%.10lf
    ",x2f?y1:y2,(n-m/a*c)/d);    
            return 0;
        }
        return 0;
    }
  • 相关阅读:
    WinForm的Chart控件画条形图
    WinForm的Chart控件画折线图
    自定义控件
    左侧收缩菜单
    数组
    C#生成随机数的三种方法
    WinForm之GDI手动双缓冲技术
    WinForm之GDI画图步骤
    WinForm GDI编程:Graphics画布类
    翻译:《实用的Python编程》08_02_Logging
  • 原文地址:https://www.cnblogs.com/shenben/p/5558327.html
Copyright © 2011-2022 走看看