先說思路:
大體思路就是輸入a,b,c,然后把a和c分別編成兩個整數(shù)相乘的形式,比如令mn=a,pq=c,則十字相乘時當(dāng)mq+np=b時,m,n,p,q四個數(shù)是正確的,把它以好看的樣子輸出就可以了。用一個循環(huán)分解a,再嵌一個循環(huán)分解c。
難點在于分解c的循環(huán)的取值范圍應(yīng)該是[-|c|,|c|]且取到0時continue跳過這次循環(huán),因為分解c時會判斷c/p是否為整數(shù),如果是整數(shù)的話說明c可以被p整除,則q=c/p,qp=c,而0不能作為分數(shù)的分母(除數(shù))。為什么取值范圍是[-|c|,|c|]呢?當(dāng)a=1,b=-5,c=-6時,我們希望輸出(x-2)(x-3)=0,-2-3=6=c而此時-2,-3都是負數(shù)。
為什么a的取值范圍是[1,a]呢?因為當(dāng)a<0時,一般會讓a、b、c分別乘上-1,而等式右邊是0,乘-1后不變。所以這樣a就恒為正數(shù)了。

image
再貼代碼(python和C++的):
python:
def method(a, b, c): if a < 0: a, b, c = -a, -b, -c for i in range(1, a + 1): if a % i == 0: for j in range(-abs(c), abs(c) + 1): if j == 0:
continue
if c % j == 0 and i * (c / j) + (a / i) * j == b:
k = a / I l = c / j if i == 1: i = '' else: i = int(i) if k == 1: k = '' else: k = int(k) if j > 0: j = '+%d' % j else: j = int(j) if l > 0: i = '+%d' % l else: i = int(l) return "(%sx%s)(%sx%s)=0" % (i, j, k, l) breaka = int(input('請輸入a的值:'))
b = int(input('請輸入b的值:'))
c = int(input('請輸入c的值:'))
print(method(a, b, c))
C++(這里注釋詳細一些,原理都是完全一樣的):
> #include <iostream>
>
> using namespace std;
>
> int main() {
>
> int a, b, c, m, n;
>
> cout << "請輸入a: ";
>
> cin >> a;
>
> cout << "請輸入b: ";
>
> cin >> b;
>
> cout << "請輸入c: ";
>
> cin >> c;
>
> if( a < 0 ){
>
> a = -a;
>
> b = -b;
>
> c = -c;
>
> }
>
> // i是a分解的兩個整數(shù)相乘的第一個整數(shù),m是另一個整數(shù)
>
> for( int i = 1; i < a + 1; i++ ){
>
> if( a % i == 0 ){
>
> // j是c分解的兩個整數(shù)相乘的第一個整數(shù),n是另一個整數(shù)
>
> // 也就是說i*j=a,m*n=c
>
> for( int j = -abs(c); j < abs(c) + 1; j++ ){
>
> if( j == 0 ){ //這個是避免j=0,自己想想為什么要加這句話
>
> continue;
>
> }
>
> if( c % j == 0 and i * (c / j) + (a / i) * j == b ){
>
> m = a / I;
>
> n = c / j;
>
> cout << "(";
>
> if( i != 1 ){
>
> cout << i;
>
> }
>
> cout << "x";
>
> if( j > 0 ){
>
> cout << "+";
>
> }
>
> cout << j;
>
> cout << ")(";
>
> if( m != 1 ){
>
> cout << m;
>
> }
>
> cout << "x";
>
> if( n > 0 ){
>
> cout << "+";
>
> }
>
> cout << n;
>
> cout << ")=0" << endl;
>
> break;
>
> }
>
> }
>
> }
>
> }
>
> return 0;
>
> }
最后放幾張算法運行時截的圖:

image

image

image