#22562: c++求神人解救


hsuhannie (saphir)


#include<iostream>

 using namespace std;

 int main(){

  int t, a[3];

  cin >> t ;

  while(t>0){

  for (int i=0; i<=3; i++)

  cin >> a[i];

  if((a[1]/a[0])==(a[2]/a[1])==(a[3]/a[2])){

  for(int i=0; i<=3; i++)

  cout << a[i] << " ";

cout << (a[2]/a[1])*a[3] << endl;

}

else {

for(int i=0; i<=3; i++)

  cout << a[i] << " ";

cout << (a[2]-a[1])+a[3] << endl;

}

t-=1;

}

 }

 輸入題目給的數字

等差數列沒有問題,但是等比數列一直跑出1 2 4 8 10

就算我隱藏輸出等比數列的最後一個數字那行程式碼

那個10還是會跑出來...

#22564: Re:c++求神人解救


snakeneedy (蛇~Snake)


if((a[1]/a[0])==(a[2]/a[1])==(a[3]/a[2])){

判斷式的串聯,C/C++ 的行為,跟數學和 Python 表現不同

2 == 2 == 2 在數學和 Python 會是肯定的
但在 C/C++ 會是 (2 == 2) == 2 → true == 2 → false

建議你寫成 (a[1]/a[0])==(a[2]/a[1]) && (a[2]/a[1])==(a[3]/a[2])

希望我這個凡人,能解答你的問題

#22573: Re:c++求神人解救


hsuhannie (saphir)


if((a[1]/a[0])==(a[2]/a[1])==(a[3]/a[2])){

判斷式的串聯,C/C++ 的行為,跟數學和 Python 表現不同

2 == 2 == 2 在數學和 Python 會是肯定的
但在 C/C++ 會是 (2 == 2) == 2 → true == 2 → false

建議你寫成 (a[1]/a[0])==(a[2]/a[1]) && (a[2]/a[1])==(a[3]/a[2])

希望我這個凡人,能解答你的問題


非常感謝您的解惑!!!