#17972: WA line:639


rmp4joxj6 (盧邊談話)

學校 : 中原大學
編號 : 97841
來源 : [27.247.230.6]
最後登入時間 :
2020-10-20 18:00:03
a528. 大數排序 | From: [119.77.170.142] | 發表日期 : 2019-06-06 23:25

#0: 100% WA (line:639)

您的答案為: 7589347589347589789238478972389749
正確答案為: 7482907834723894782934789237489234

不知道錯哪,懇請大家相助!!

#include<iostream>
#include<string>
using namespace std;
int main(){
int times;
string numbers;
while(cin>>times){
string A[times];
for(int a=0;a<=times-1;a++){ //資料輸入陣列
cin>>numbers;
A[a]=numbers;
}
for(int a=0;a<=times-2;a++){ //排序
for(int b=a+1;b<=times-1;b++){
if(A[a].at(0)!='-'&&A[b].at(0)!='-'){ //++
if(A[a].length()>A[b].length()){ //長不同
string temp=A[a];
A[a]=A[b];
A[b]=temp;
}else if(A[a].length()==A[b].length()){ //長相同
for(int c=0;c<A[a].length();c++){
if(A[a].at(c)>A[b].at(c)){
string temp=A[a];
A[a]=A[b];
A[b]=temp;
break;
}
}
}
}else if(A[a].at(0)!='-'&&A[b].at(0)=='-'){ //+-
string temp=A[a];
A[a]=A[b];
A[b]=temp;
}else if(A[a].at(0)=='-'&&A[b].at(0)=='-'){ //--
if(A[a].length()<A[b].length()){ //長不同
string temp=A[a];
A[a]=A[b];
A[b]=temp;
}else if(A[a].length()==A[b].length()){ //長相同
for(int c=1;c<A[a].length();c++){
if(A[a].at(c)<A[b].at(c)){
string temp=A[a];
A[a]=A[b];
A[b]=temp;
break;
}
}
}
}
}
}
for(int a=0;a<=times-1;a++){ //輸出
cout<<A[a]<<endl;
}
}
}
 
#17973: Re:WA line:639


inversion (「我們所認識的可符香是個像天使的好女孩」之葉林 *Cries...)

學校 : 國立清華大學
編號 : 43537
來源 : [49.159.6.107]
最後登入時間 :
2022-05-28 19:29:12
a528. 大數排序 | From: [49.158.83.43] | 發表日期 : 2019-06-07 00:49

您的程式碼在以下兩個測資會有不同的結果(應該要是一樣的,因為只有數字的順序不同):

2

75893

74829

您的結果為

74829

75893

 

2

74829

75893

您的結果為

75893

74829

 

所以可以明顯地看到您對於相同長度的數字之大小判斷有誤,可以朝著這方面想想。

提示:由左至右掃過位元時,當遇到兩數的位元不一樣的時候,是否即可確定兩者的大小關係?

 
#17974: Re:WA line:639


rmp4joxj6 (盧邊談話)

學校 : 中原大學
編號 : 97841
來源 : [27.247.230.6]
最後登入時間 :
2020-10-20 18:00:03
a528. 大數排序 | From: [119.77.170.142] | 發表日期 : 2019-06-07 09:34

您的程式碼在以下兩個測資會有不同的結果(應該要是一樣的,因為只有數字的順序不同):

2

75893

74829

您的結果為

74829

75893

 

2

74829

75893

您的結果為

75893

74829

 

所以可以明顯地看到您對於相同長度的數字之大小判斷有誤,可以朝著這方面想想。

提示:由左至右掃過位元時,當遇到兩數的位元不一樣的時候,是否即可確定兩者的大小關係?

謝謝,已AC

我把

}else if(A[a].length()==A[b].length()){           //++長相同
for(int c=0;c<A[a].length();c++){
if(A[a].at(c)>A[b].at(c)){
string temp=A[a];
A[a]=A[b];
A
[b]=temp;
break;
}
}
}
改成
}else if(A[a].length()==A[b].length()){ //長相同 int c=0;
while(c<=A[a].length()-1){ if(A[a].at(c)>A[b].at(c)){ string temp=A[a]; A[a]=A[b];
A[b]=temp; break; }else if(A[a].at(c)<A[b].at(c)){ break; }else if(A[a].at(c)==A[b].at(c)){ c++; } } }
 
ZeroJudge Forum