我自己的解法(感觉比较全面也能帮住大家)
查看原帖
我自己的解法(感觉比较全面也能帮住大家)
1332150
whywhywhywhywhy楼主2024/4/6 08:09

这是我的第一个帖子,希望大家支持:)

这道题木看起来很简单,但实际上是判断和循环的难点。这里面的数字1我们无法直接让C++读出,而是要自己判断。二元一次方程组意味着要输入两遍。

请注意,如果您按方程的格式输入,那多少是要没了。 这里面1读不出来,所以最好用字符串输入方便后面的查找和判断

同时,考虑到代码长度问题,这边建议做出整体后套一层循环比较方便。

思路 我们可以先输入,然后在x和y的位置前后寻找系数并判断正负,最后枚举输出 (这里方程的解的区间在[-19602,19602],这很好判断,系数绝对值不大于100,方程解绝对值不大于100,即系数和方程解最大绝对值值均为99。当未知数系数和未知数的解均为99时,方程右边有最大值19606,有最小值-19602)

下面是我的代码(初二学生写了好久,起码看看理解麻)

#include<bits/stdc++.h>
using namespace std;
string f1,f2;
int xs[20],x1=0,yy1=0,a1=0,b1=0,c1=0,num[6],numk=0;
int xss(int a,int i,int fi)
{
	return a*pow(10,fi-i);
}
int isolate(char place,int put)
{
	if(place=='-') return -put;
	else return put;
}
int main()
{
	for(int i=0;i<6;i++) num[i]=0;
	for(int aa=1;aa<=2;aa++)
	{
		for(int i=0;i<20;i++) xs[i]=10;
		cin>>f1;
		for(int i=0;i<f1.length();i++)
		{
			if((f1[i]>='0')&&(f1[i]<='9')) xs[i]=f1[i]-'0';
			if(f1[i]=='x') x1=i;
			if(f1[i]=='y') yy1=i;
		}
		for(int i=0;i<20;i++)
		{
			if(xs[i]!=10)
			{
				if(i<x1) a1+=xss(xs[i],i,x1-1);
				if((i<yy1)&&(i>x1)) b1+=xss(xs[i],i,yy1-1);
				if((i>yy1+1)&&(i<f1.length())) c1+=xss(xs[i],i,f1.length()-1);
			}
			if(yy1-x1==2) b1=1;
			if((f1[0]=='x')||((f1[1]=='x')&&(f1[0]=='-'))) a1=1;
		}
		a1=isolate(f1[0],a1);
		b1=isolate(f1[x1+1],b1);
		c1=isolate(f1[yy1+2],c1);
		num[numk]=a1,numk++;
		num[numk]=b1,numk++;
		num[numk]=c1,numk++;
		a1=0,b1=0,c1=0;
	}
	for(int i=-20000;i<=20000;i++)
	{
		if(((num[2]-i*num[0])%num[1]==0)&&(i*num[3]+(num[2]-i*num[0])/num[1]*num[4]==num[5]))
		{
			cout<<i<<endl<<(num[2]-i*num[0])/num[1];
			break;
		}
	}
	return 0;
}
2024/4/6 08:09
加载中...