1 条题解

  • 0
    @ 2025-4-12 21:47:19

    C :

    #include<stdio.h>
    #include<string.h>
    #include<ctype.h>
    #include<assert.h>
    #include<math.h>
    
    char str[128];
    int c[4];
    
    int main() {
            int sign=1,i,r,p,sign1=1,f;
            while(scanf("%s",str)!=EOF) {
                    memset(c,0,sizeof(c));
                    for(f=i=r=p=0;str[i];i++) {
                            if (str[i]=='=') {
                                    if (p && r==0) r=1;
                                    c[p]+=sign*sign1*r;
                                    sign1=-1;
                                    r=p=f=0,sign=1;
                            } else if (str[i]=='^') {
                                    p=str[i+1]-'0';
                                    i++;
                            } else if (str[i]=='+') {
                                    c[p]+=sign*sign1*r;
                                    sign=1,r=p=f=0;
                            } else if (str[i]=='-') {
                                    c[p]+=sign*sign1*r;
                                    sign=1,r=p=f=0;
                            } else if (str[i]=='x' || str[i]=='X') {
                                    if (!f) r=1;
                                    p=1;//p表示次数。有x至少次数为1,之后若再扫描到^则p变为2.若为常数项,p为初始值0,不变。
                            } else if (isdigit(str[i])) {
                                    r=r*10+str[i]-'0';//r表示x之前的系数。
                                    f=1;//f用来表示x之前是否存在系数(flag)。返回上两行,if (!f),说明f为初始值0,故强制赋系数1.
                            }
                    }
                    if (f) c[p]+=sign*sign1*r;
    
                    assert(c[2]!=0);
                    if (c[1]*c[1]>=4*c[0]*c[2]) {
                            double d=sqrt(1.0*(c[1]*c[1]-4*c[0]*c[2]));
                            printf("%.2lf %.2lf\n",(-c[1]-d)/2/c[2]+1e-6,(-c[1]+d)/2/c[2]+1e-6);
                    } else puts("No Solution");
            }
            return 0;
    }
    
    

    C++ :

    #include<stdio.h>
    #include<string.h>
    #include<ctype.h>
    #include<assert.h>
    #include<math.h>
    
    char str[128];
    int c[4];
    
    int main() {
    	int sign=1,i,r,p,sign1=1,f;
    	while(scanf("%s",str)!=EOF) {
    		memset(c,0,sizeof(c));
    		for(f=i=r=p=0;str[i];i++) {
    			if (str[i]=='=') {
    				if (p && r==0) r=1;
    				c[p]+=sign*sign1*r;
    				sign1=-1;
    				r=p=f=0,sign=1;
    			} else if (str[i]=='^') {
    				p=str[i+1]-'0';
    				i++;
    			} else if (str[i]=='+') {
    				c[p]+=sign*sign1*r;
    				sign=1,r=p=f=0;
    			} else if (str[i]=='-') {
    				c[p]+=sign*sign1*r;
    				sign=1,r=p=f=0;
    			} else if (str[i]=='x' || str[i]=='X') {
    				if (!f) r=1;
    				p=1;
    			} else if (isdigit(str[i])) {
    				r=r*10+str[i]-'0';
    				f=1;
    			}
    		}
    		if (f) c[p]+=sign*sign1*r;
    
    		assert(c[2]!=0);
    		if (c[1]*c[1]>=4*c[0]*c[2]) {
    			double d=sqrt(c[1]*c[1]-4*c[0]*c[2]);
    			printf("%.2lf %.2lf\n",(-c[1]-d)/2/c[2]+1e-6,(-c[1]+d)/2/c[2]+1e-6);
    		} else puts("No Solution");
    	}
    	return 0;
    }
    
    
    • 1

    信息

    ID
    1726
    时间
    1000ms
    内存
    32MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者