您的答案為: 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;
}
}
}
您的程式碼在以下兩個測資會有不同的結果(應該要是一樣的,因為只有數字的順序不同):
2
75893
74829
您的結果為
74829
75893
2
74829
75893
您的結果為
75893
74829
所以可以明顯地看到您對於相同長度的數字之大小判斷有誤,可以朝著這方面想想。
提示:由左至右掃過位元時,當遇到兩數的位元不一樣的時候,是否即可確定兩者的大小關係?
您的程式碼在以下兩個測資會有不同的結果(應該要是一樣的,因為只有數字的順序不同):
2
75893
74829
您的結果為
74829
75893
2
74829
75893
您的結果為
75893
74829
所以可以明顯地看到您對於相同長度的數字之大小判斷有誤,可以朝著這方面想想。
提示:由左至右掃過位元時,當遇到兩數的位元不一樣的時候,是否即可確定兩者的大小關係?
}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++; } } }