这是我的第一个帖子,希望大家支持:)
这道题木看起来很简单,但实际上是判断和循环的难点。这里面的数字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;
}