样例和示例一都过了,0分求助
查看原帖
样例和示例一都过了,0分求助
1123515
alwfone楼主2024/7/6 17:33

求求大佬帮帮我

#include <bits/stdc++.h>
using namespace std;
#define ll long long
char a[1000],w;
ll last=1,l,r,flag,wf=1,sf=-1,lastf=1,j=1;
//last:当前的数字,l:未知数总系数,r:总常数
//flag:上个数是不是未知数系数
//wf:当前未知数符号,sf:当前常数符号
//lastf:当前的数字的符号
//j:数字是不是假的(没输入数字,判断a+1=1之类)
int main(){
	scanf("%[^\n]%*c",a);
	ll len=strlen(a)-1;
	for (ll i=0;i<=len;i++)
	{
		if (a[i]==61)
		{
			if (!flag)
				r+=last*sf*lastf;
			else
				flag=0;
			last=1;
			lastf=1;
			j=1;
			wf=-1;
			sf=1;
			continue;
		}
		if (a[i]>61)
		{
			w=a[i];
			l=l+last*wf*lastf;
			flag=1;
			continue;
		}
		if (a[i]<48)
		{
			if (!j)
			{
				if (!flag)
					r+=last*sf*lastf;
				else
					flag=0;
				last=1;
			}
			if (a[i]=='-')
				lastf=-1;
			else
				lastf=1;
			j=1;
			continue;
		}
		int k=a[i]-'0';
		if (!j)
			last=last*10+k;
		else
		{
			last=k;
			j=0;
		}
		flag=0;
	}
	if (!flag)
		r+=last*sf*lastf;
	else
		flag=0;
	float k=(float)r/(float)l*1.0;
	printf("%c=%.3f\n",w,k);
	return 0;
	}

思路如下:
1.未知数放左边,常数放右边,所以等号左边wf为1、sf为-1,等号右边相反
2.如果当前输入一个符号,就计算前面的数字,未知数的系数在发现未知数时已解决,反之当场解决,再把last改为1,以防下一个未知数无系数,如1+a+1=3
3.输入数时,如果last为2操作的1,那么覆盖;反之放在最后
谢谢,

2024/7/6 17:33
加载中...