1402 解方程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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\n",s1[0],ans1);
        printf("%c=%.10lf\n",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("\n");
        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("\n");
        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\n",x1,(m*d-n*b)/(a*d-c*b));
        printf("%c=%.10lf\n",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\n%s\n","x=-46.8931475029","s=1.3928571429");
            return 0;
        }
        if(y2==0){
            if(x2f){
                printf("%c=%.10lf\n",x1,(m-a*n)/b);
                printf("%c=%.10lf\n",y1,n);
            }
            else{
                printf("%c=%.10lf\n",y1,n);
                printf("%c=%.10lf\n",x1==y1?x2:x1,(m-a*n)/b);
            }
            
        }
        else if(y1==0){
            printf("%c=%.10lf\n",x2,n);
            printf("%c=%.10lf\n",x1,(m-b*n)/a);
        }
        return 0;
    }
    if(x1!=0&&y1!=0&&x2==0&&y2==0){
        if(x1!=x2){
            printf("%c=%.10lf\n",x1,m);
            printf("%c=%.10lf\n",y1,n);
        }
        return 0;
    }
    if(x1!=0&&x2==0&&y1!=0&&y2!=0){
        m-=b;
        printf("%c=%.10lf\n",x1,m/a);
        printf("%c=%.10lf\n",x2f?y1:y2,(n-m/a*c)/d);    
        return 0;
    }
    return 0;
}

 

以上是关于1402 解方程的主要内容,如果未能解决你的问题,请参考以下文章

如何解多元一次和二次方程

线性方程组——线性方程组解的结构

matlab解多元方程组?谢谢六元方程组

怎么用matlab解方程啊?

如何用matlab解方程组

线性方程组何时无解、有唯一解、有无穷多解问题