我會把解答放上來並不是我唱秋,我只是想讓跟我一樣的新手在不會想邏輯時,有個參考依據,所以請勿抄襲,若有高手有更好的解法請盡量告訴我,我想進步啊!!!\(^0^)/
//d.057詳解版by 放空ing
#include <iostream>
using namespace std;
int main(){
int x1, y1, x2, y2, a, b, w; //原座標為(x1,y2),之後移動到的點是(x2,y2)
while(cin>>x1>>y1>>x2>>y2,x1>0 || y1>0 || x2>0 || y2>0){
if(x1 > x2)
a=x1-x2; //a=x座標的移動
else if(x1 < x2)
a=x2-x1;
else
a=0;
if(y1 > y2)
b=y1-y2; //b=y座標的移動
else if(y1 < y2)
b=y2-y1;
else
b=0;
if(a == b && a && b)
w=1; //w=所要移動的步數,這裡的條件是a==b,而且a和b不為0,這樣就會是等腰直角三角形,所以只需動1步
else if(a != b && a==0 && b)
w=1; //當a!=b,而且a==0,b!=0時,代表是在作Y座標的移動,移動路線會為一垂直的直線,所以只需動1步
else if(a != b && a && b ==0)
w=1; //當a!=b,而且a!=0,b==0時,代表是在作X座標的移動,移動路線會為一水平的直線,所以只需動1步
else if(a !=b)
w=2; //當a!=b,代表2點之間不夠成等腰直角三角形,所以就需動2步
else if(a == b && a==0 && b==0)
w=0; //當a==b,且a==0,b==0時,代表在原點所以不需移動
cout<<w<<endl;
}
}
我會把解答放上來並不是我唱秋,我只是想讓跟我一樣的新手在不會想邏輯時,有個參考依據,所以請勿抄襲,若有高手有更好的解法請盡量告訴我,我想進步啊!!!\(^0^)/
//d.057詳解版by 放空ing
#include
using namespace std;
int main(){
int x1, y1, x2, y2, a, b, w; //原座標為(x1,y2),之後移動到的點是(x2,y2)
while(cin>>x1>>y1>>x2>>y2,x1>0 || y1>0 || x2>0 || y2>0){
if(x1 > x2)
a=x1-x2; //a=x座標的移動
else if(x1 < x2)
a=x2-x1;
else
a=0;
if(y1 > y2)
b=y1-y2; //b=y座標的移動
else if(y1 < y2)
b=y2-y1;
else
b=0;
if(a == b && a && b)
w=1; //w=所要移動的步數,這裡的條件是a==b,而且a和b不為0,這樣就會是等腰直角三角形,所以只需動1步
else if(a != b && a==0 && b)
w=1; //當a!=b,而且a==0,b!=0時,代表是在作Y座標的移動,移動路線會為一垂直的直線,所以只需動1步
else if(a != b && a && b ==0)
w=1; //當a!=b,而且a!=0,b==0時,代表是在作X座標的移動,移動路線會為一水平的直線,所以只需動1步
else if(a !=b)
w=2; //當a!=b,代表2點之間不夠成等腰直角三角形,所以就需動2步
else if(a == b && a==0 && b==0)
w=0; //當a==b,且a==0,b==0時,代表在原點所以不需移動
cout< }
}
我是用一次函數做的XD
假設皇后(a,b)在一個xy平面上
那任一點(x,y)只要符合下列其中一個函數就只要走1步
x=a
y=b
y=x+(b-a)
y=-x+(a+b)
剩下的除了x=a且y=b(皇后本身那一點)是0步
其它的都是2步
以下是我判斷部份的程式碼(我用C語言寫的:P)
if(xy[0] == xy[2] && xy[1] == xy[3]){ //x=a且y=b
printf("0\n");
}
else if(xy[0] == xy[2] || xy[1] == xy[3]){ //x=a或y=b
printf("1\n");
}
else if(xy[3]-xy[2]-xy[1]+xy[0] == 0){ //y-x-(b-a)=0
printf("1\n");
}
else if(xy[3]+xy[2]-xy[1]-xy[0] == 0){ //y+x-(a+b)=0
printf("1\n");
}
else{
printf("2\n");
註:xy[0]=a , xy[1]=b , xy[2]=x , xy[3]=y
我會把解答放上來並不是我唱秋,我只是想讓跟我一樣的新手在不會想邏輯時,有個參考依據,所以請勿抄襲,若有高手有更好的解法請盡量告訴我,我想進步啊!!!\(^0^)/
//d.057詳解版by 放空ing
#include
using namespace std;
int main(){
int x1, y1, x2, y2, a, b, w; //原座標為(x1,y2),之後移動到的點是(x2,y2)
while(cin>>x1>>y1>>x2>>y2,x1>0 || y1>0 || x2>0 || y2>0){
if(x1 > x2)
a=x1-x2; //a=x座標的移動
else if(x1 < x2)
a=x2-x1;
else
a=0;
if(y1 > y2)
b=y1-y2; //b=y座標的移動
else if(y1 < y2)
b=y2-y1;
else
b=0;
if(a == b && a && b)
w=1; //w=所要移動的步數,這裡的條件是a==b,而且a和b不為0,這樣就會是等腰直角三角形,所以只需動1步
else if(a != b && a==0 && b)
w=1; //當a!=b,而且a==0,b!=0時,代表是在作Y座標的移動,移動路線會為一垂直的直線,所以只需動1步
else if(a != b && a && b ==0)
w=1; //當a!=b,而且a!=0,b==0時,代表是在作X座標的移動,移動路線會為一水平的直線,所以只需動1步
else if(a !=b)
w=2; //當a!=b,代表2點之間不夠成等腰直角三角形,所以就需動2步
else if(a == b && a==0 && b==0)
w=0; //當a==b,且a==0,b==0時,代表在原點所以不需移動
cout< }
}
我是用一次函數做的XD
假設皇后(a,b)在一個xy平面上
那任一點(x,y)只要符合下列其中一個函數就只要走1步
x=a
y=b
y=x+(b-a)
y=-x+(a+b)
剩下的除了x=a且y=b(皇后本身那一點)是0步
其它的都是2步
以下是我判斷部份的程式碼(我用C語言寫的:P)
if(xy[0] == xy[2] && xy[1] == xy[3]){ //x=a且y=b
printf("0\n");
}
else if(xy[0] == xy[2] || xy[1] == xy[3]){ //x=a或y=b
printf("1\n");
}
else if(xy[3]-xy[2]-xy[1]+xy[0] == 0){ //y-x-(b-a)=0
printf("1\n");
}
else if(xy[3]+xy[2]-xy[1]-xy[0] == 0){ //y+x-(a+b)=0
printf("1\n");
}
else{
printf("2\n");
註:xy[0]=a , xy[1]=b , xy[2]=x , xy[3]=y
您的想法跟我的差不多
只是我一直苦於如何表達做標上的移動
看到您的程式碼我才恍然大悟居然可以這樣寫XD
感謝您的分享