#17365: 請問我哪裡錯了


rexwu1104@gmail.com (黑雪公主 Black Lotus)

學校 : 新北市私立南山高級中學
編號 : 93041
來源 : [49.216.131.103]
最後登入時間 :
2024-06-06 19:28:43
d074. 電腦教室 -- 板橋高中教學題 | From: [118.166.52.206] | 發表日期 : 2019-04-06 13:29

#include <iostream>
using namespace std;
int main() {
  int a, b, d=0;
  cin >> a;
  a--;
  i :
  cin >> b;
  if ((b>d)&&(a!=0)) {
    d = b;
    a--;
    goto i;
  }
  else if ((b>d)&&(a==0)) {
    d = b;
  }
  else if ((b<d)&&(a!=0)) {
    d = d;
    a--;
    goto i;
  }
  cout << d;
}
請問有誰可以告訴我,為什麼去掉第一個a--的話,他就會多重複一次。
 
#17369: Re:請問我哪裡錯了


ufve0704 (爬 我爬 我爬爬爬 有排行榜這種東西就是要爬 爬過我上面的那...)

學校 : 臺北市私立延平高級中學
編號 : 83268
來源 : [203.72.178.1]
最後登入時間 :
2023-10-30 13:02:50
d074. 電腦教室 -- 板橋高中教學題 | From: [114.42.219.193] | 發表日期 : 2019-04-06 14:17

#include
using namespace std;
int main() {
  int a, b, d=0;
  cin >> a;
  //a--;
  i :
 
 
a--;
 
 
  cin >> b;
  if ((b>d)&&(a!=0)) {
    d = b;
    //a--;
    goto i;
  }
  else if ((b>d)&&(a==0)) {
    d = b;
  }
  else if ((b<d)&&(a!=0)) {
    d = d;
    //a--;
    goto i;
  }
  cout << d;
}
請問有誰可以告訴我,為什麼去掉第一個a--的話,他就會多重複一次。

我先說,goto在這裡是十分不好的用法,很容易出不好找出的bug。
建議改成while 或 for 迴圈。

改成while會變:

#include <bits/stdc++.h>

using namespace std ;

int main(){

int a,b,d=0;

cin>>a;

a--;

while(a--){

cin>>b;

if((b>d)&&(a!=0))

d=b;

else if((b>d)&&(a==0))

d=b;

}

cout<<d;

}

少了許多不必要的行數,比如:goto i   ,  i:  ,   a--   。

也比較難出現少一次或多一次的問題。

還有d=d;是無意義的,可避免寫出,

至於為甚麼,其實你只要在判定前先a--;就好了。

 
#17370: Re:請問我哪裡錯了


ufve0704 (爬 我爬 我爬爬爬 有排行榜這種東西就是要爬 爬過我上面的那...)

學校 : 臺北市私立延平高級中學
編號 : 83268
來源 : [203.72.178.1]
最後登入時間 :
2023-10-30 13:02:50
d074. 電腦教室 -- 板橋高中教學題 | From: [114.42.219.193] | 發表日期 : 2019-04-06 14:26

#include
using namespace std;
int main() {
  int a, b, d=0;
  cin >> a;
  //a--;
  i :
 
 
a--;
 
 
  cin >> b;
  if ((b>d)&&(a!=0)) {
    d = b;
    //a--;
    goto i;
  }
  else if ((b>d)&&(a==0)) {
    d = b;
  }
  else if ((b<d)&&(a!=0)) {
    d = d;
    //a--;
    goto i;
  }
  cout << d;
}
請問有誰可以告訴我,為什麼去掉第一個a--的話,他就會多重複一次。

我先說,goto在這裡是十分不好的用法,很容易出不好找出的bug。
建議改成while 或 for 迴圈。

改成while會變:

#include <bits/stdc++.h>

using namespace std ;

int main(){

int a,b,d=0;

cin>>a;

 

 

//a--;

 

 

 

while(a--){

cin>>b;

if((b>d)&&(a!=0))

d=b;

else if((b>d)&&(a==0))

d=b;

}

cout<<d;

}

少了許多不必要的行數,比如:goto i   ,  i:  ,   a--   。

也比較難出現少一次或多一次的問題。

還有d=d;是無意義的,可避免寫出,

至於為甚麼,其實你只要在判定前先a--;就好了。

打錯了!!這一行也不用XD


 
#17393: Re:請問我哪裡錯了


rexwu1104@gmail.com (黑雪公主 Black Lotus)

學校 : 新北市私立南山高級中學
編號 : 93041
來源 : [49.216.131.103]
最後登入時間 :
2024-06-06 19:28:43
d074. 電腦教室 -- 板橋高中教學題 | From: [118.166.52.206] | 發表日期 : 2019-04-07 12:03

#include
using namespace std;
int main() {
  int a, b, d=0;
  cin >> a;
  //a--;
  i :
 
 
a--;
 
 
  cin >> b;
  if ((b>d)&&(a!=0)) {
    d = b;
    //a--;
    goto i;
  }
  else if ((b>d)&&(a==0)) {
    d = b;
  }
  else if ((b<d)&&(a!=0)) {
    d = d;
    //a--;
    goto i;
  }
  cout << d;
}
請問有誰可以告訴我,為什麼去掉第一個a--的話,他就會多重複一次。

我先說,goto在這裡是十分不好的用法,很容易出不好找出的bug。
建議改成while 或 for 迴圈。

改成while會變:

#include <bits/stdc++.h>

using namespace std ;

int main(){

int a,b,d=0;

cin>>a;

 

 

//a--;

 

 

 

while(a--){

cin>>b;

if((b>d)&&(a!=0))

d=b;

else if((b>d)&&(a==0))

d=b;

}

cout<<d;

}

少了許多不必要的行數,比如:goto i   ,  i:  ,   a--   。

也比較難出現少一次或多一次的問題。

還有d=d;是無意義的,可避免寫出,

至於為甚麼,其實你只要在判定前先a--;就好了。

打錯了!!這一行也不用XD


可是我照你打得反而錯了,我原本沒錯,我只是不懂那個a--


 
#17394: Re:請問我哪裡錯了


rexwu1104@gmail.com (黑雪公主 Black Lotus)

學校 : 新北市私立南山高級中學
編號 : 93041
來源 : [49.216.131.103]
最後登入時間 :
2024-06-06 19:28:43
d074. 電腦教室 -- 板橋高中教學題 | From: [118.166.52.206] | 發表日期 : 2019-04-07 12:07

#include
using namespace std;
int main() {
  int a, b, d=0;
  cin >> a;
  //a--;
  i :
 
 
a--;
 
 
  cin >> b;
  if ((b>d)&&(a!=0)) {
    d = b;
    //a--;
    goto i;
  }
  else if ((b>d)&&(a==0)) {
    d = b;
  }
  else if ((b<d)&&(a!=0)) {
    d = d;
    //a--;
    goto i;
  }
  cout << d;
}
請問有誰可以告訴我,為什麼去掉第一個a--的話,他就會多重複一次。

我先說,goto在這裡是十分不好的用法,很容易出不好找出的bug。
建議改成while 或 for 迴圈。

改成while會變:

#include <bits/stdc++.h>

using namespace std ;

int main(){

int a,b,d=0;

cin>>a;

 

 

//a--;

 

 

 

while(a--){

cin>>b;

if((b>d)&&(a!=0))

d=b;

else if((b>d)&&(a==0))

d=b;

}

cout<<d;

}

少了許多不必要的行數,比如:goto i   ,  i:  ,   a--   。

也比較難出現少一次或多一次的問題。

還有d=d;是無意義的,可避免寫出,

至於為甚麼,其實你只要在判定前先a--;就好了。

打錯了!!這一行也不用XD


可是我照你打得反而錯了,我原本沒錯,我只是不懂那個a--


a--


 
#17399: Re:請問我哪裡錯了


ufve0704 (爬 我爬 我爬爬爬 有排行榜這種東西就是要爬 爬過我上面的那...)

學校 : 臺北市私立延平高級中學
編號 : 83268
來源 : [203.72.178.1]
最後登入時間 :
2023-10-30 13:02:50
d074. 電腦教室 -- 板橋高中教學題 | From: [114.42.219.193] | 發表日期 : 2019-04-07 14:36

#include
using namespace std;
int main() {
  int a, b, d=0;
  cin >> a;
  //a--;
  i :
 
 
a--;
 
 
  cin >> b;
  if ((b>d)&&(a!=0)) {
    d = b;
    //a--;
    goto i;
  }
  else if ((b>d)&&(a==0)) {
    d = b;
  }
  else if ((b<d)&&(a!=0)) {
    d = d;
    //a--;
    goto i;
  }
  cout << d;
}
請問有誰可以告訴我,為什麼去掉第一個a--的話,他就會多重複一次。

可是我照你打得反而錯了<---------跟另外一題一樣

,我原本沒錯,我只是不懂那個a--<-------------
那是因為你原本是在輸入後才a--,

最後會少一次,

所以前面要加一個a--。

 

 

我改成輸入前都先a--。



 
ZeroJudge Forum