1 条题解

  • 1
    @ 2023-8-2 21:52:58
    #include<cstdio>
    #include<cstring>
    using namespace std;
    
    int main(){
        char f[100];  //以字符数组的形式输入
        scanf("%s", f);
    
        int k=0, b=0;  //kx+b=0
    
        bool is1=1, is2=1, is3=0;  //is1 =0:负数 =1:正数  is2 =0:k =1:b  is3 =0:等号左侧 =1:等号右侧 
        int n=0, mode=0;  //n:存储数字 mode =0:数字首位 =1:加法 =2:减法
        char x;  //x:存储未知数 
        for(int i=0; i<strlen(f); i++){
            if(f[i]=='-' && !n) is1 = 0;
            else if(f[i] == '+') mode = 1;
            else if(f[i] == '-') mode = 2;
            else if(f[i] == '=') mode = 1;
            else if(f[i]>='0' && f[i]<='9'){
                n *= 10;
                n += f[i]-'0';
            } else{
            	is2 = 0;
            	x = f[i];
            	
            	if(!n) n = 1;
    		}
    
            if(mode == 1){
                if(is2){
                	if(is3){
                		if(is1) b -= n;
                    	else b += n;
    				} else{
    					if(is1) b += n;
                    	else b -= n;
    				}
                } else{
                    if(is3){
                		if(is1) k -= n;
                    	else k += n;
    				} else{
    					if(is1) k += n;
                    	else k -= n;
    				}
                }
                is1 = 1;
    
                is2 = 1;
                n = 0;
                mode = 0;
            } else if(mode == 2){
                if(is2){
                	if(is3){
                		if(is1) b -= n;
                    	else b += n;
    				} else{
    					if(is1) b += n;
                    	else b -= n;
    				}
                } else{
                    if(is3){
                		if(is1) k -= n;
                    	else k += n;
    				} else{
    					if(is1) k += n;
                    	else k -= n;
    				}
                }
                is1 = 0;
    
                is2 = 1;
                n = 0;
                mode = 0;
            } else ;
            
            if(f[i] == '=') is3 = 1;
        } 
        
        if(is2){
        	if(is3){
            	if(is1) b -= n;
                else b += n;
    		} else{
    			if(is1) b += n;
                else b -= n;
    		}
        } else{
            if(is3){
                if(is1) k -= n;
                else k += n;
    		} else{
    			if(is1) k += n;
                else k -= n;
    		}
        }
        
        double result=1.0*(-b)/k;
        if(result == 0) result = 0;  //防止 result==0 时输出 -0.000 的情况(测试数据2)
    
        printf("%c=%.3lf", x, result);  //输出
    
        return 0;
    }
    
    • 1

    信息

    ID
    101
    时间
    1000ms
    内存
    125MiB
    难度
    7
    标签
    递交数
    30
    已通过
    8
    上传者