#9868: 請各位大大看看QQ


eric86011106 (蘇蘇)

學校 : 國立武陵高級中學
編號 : 49195
來源 : [110.28.134.194]
最後登入時間 :
2020-11-28 23:39:00
a528. 大數排序 | From: [39.13.58.235] | 發表日期 : 2015-05-28 00:55

我不知道位和卡住= =

用bubble sort 順排時卡在639行

逆排時卡在638

結果都是

 答案不正確

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

可麻煩大大幫分析幫看? 

--------以下是程式碼ww-----大大加油!!---------

 #include <iostream>

using namespace std;

struct bignum{

string digit;

};

bool comp(bignum left,bignum right){

int flag=0;

if(left.digit[0]!='-' && right.digit[0]=='-') flag=1;

else if (left.digit[0]=='-' && right.digit[0]!='-') flag= 0;

else{

if (left.digit[0]=='-' && right.digit[0]=='-'){

if (left.digit.size() < right.digit.size()) flag=1;

else if (left.digit.size() > right.digit.size()) flag=0;

else{

for(int i=0;i<left.digit.size();i++){ 

if (left.digit[i]<right.digit[i]){

flag=1;

break;

}

}

}

}

else{

if (left.digit.size() > right.digit.size()) flag=1;

else if (left.digit.size() < right.digit.size()) flag=0;

else{

for(int i=0;i<left.digit.size();i++){ 

if (left.digit[i]>right.digit[i]){

flag=1;

}

}

}

}

}

if (flag==1) return 1;

else return 0;

}

int main(){

int n;

while(cin>>n){

bignum series[n];

for(int i=0;i<n;i++){

cin>>series[i].digit;

}

for(int j=n-1;j>0;j--){

for(int k=0;k<j;k++){

bignum bignumc;

if(comp(series[k],series[k+1])){

bignumc=series[k+1];

series[k+1]=series[k];

series[k]=bignumc;

}

}

}

for(int j=n-1;j>0;j--){

for(int k=j;k>=1;k--){

bignum bignumc;

if(comp(series[k-1],series[k])){

bignumc=series[k-1];

series[k-1]=series[k];

series[k]=bignumc;

}

}

}

for(int j=0;j<n;j++){

cout<<series[j].digit<<endl;

}

}

return 0;

}

 
#11149: Re:請各位大大看看QQ


iven00000000 (羽音穎次方)

學校 : 國立臺灣科技大學
編號 : 48522
來源 : [61.219.144.211]
最後登入時間 :
2017-10-20 15:22:23
a528. 大數排序 | From: [36.229.212.197] | 發表日期 : 2016-07-09 04:53

 

 

 

 

 

 

 

C++裡面string有現成的compare可以用
可以試試看


 
#12005: Re:請各位大大看看QQ


nkavengertree (LaG)

學校 : 不指定學校
編號 : 62501
來源 : [49.216.191.28]
最後登入時間 :
2021-11-21 03:06:49
a528. 大數排序 | From: [163.30.20.150] | 發表日期 : 2017-05-08 11:08

我不知道位和卡住= =

用bubble sort 順排時卡在639行

逆排時卡在638

結果都是

 答案不正確

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

可麻煩大大幫分析幫看? 

--------以下是程式碼ww-----大大加油!!---------

 #include

using namespace std;

struct bignum{

string digit;

};

bool comp(bignum left,bignum right){

int flag=0;

if(left.digit[0]!='-' && right.digit[0]=='-') flag=1;

else if (left.digit[0]=='-' && right.digit[0]!='-') flag= 0;

else{

if (left.digit[0]=='-' && right.digit[0]=='-'){

if (left.digit.size() < right.digit.size()) flag=1;

else if (left.digit.size() > right.digit.size()) flag=0;

else{

for(int i=0;i<left.digit.size();i++){ 

if (left.digit[i]<right.digit[i]){

flag=1;

break;

}

}

}

}

else{

if (left.digit.size() > right.digit.size()) flag=1;

else if (left.digit.size() < right.digit.size()) flag=0;

else{

for(int i=0;i<left.digit.size();i++){ 

if (left.digit[i]>right.digit[i]){

flag=1;

}

}

}

}

}

if (flag==1) return 1;

else return 0;

}

int main(){

int n;

while(cin>>n){

 

bignum series[n];

for(int i=0;i<n;i++){

cin>>series[i].digit;

}

for(int j=n-1;j>0;j--){

for(int k=0;k<j;k++){

bignum bignumc;

if(comp(series[k],series[k+1])){

bignumc=series[k+1];

series[k+1]=series[k];

series[k]=bignumc;

}

}

}

for(int j=n-1;j>0;j--){

for(int k=j;k>=1;k--){

bignum bignumc;

if(comp(series[k-1],series[k])){

bignumc=series[k-1];

series[k-1]=series[k];

series[k]=bignumc;

}

}

}

for(int j=0;j<n;j++){

cout<<series[j].digit<<endl;

}

}

return 0;

}

你的排序是錯誤的~

在相同的長度下,例如輸入

3

-123456

-456123

-222222

而你的輸出是

-222222

-123456

-456123

 
ZeroJudge Forum