#14856: 不知道自己哪裡錯了 請求開導謝謝


h411016 (hantsai)

學校 : 國立科學工業園區實驗高級中學
編號 : 80871
來源 : [219.80.176.10]
最後登入時間 :
2018-08-16 11:26:07
a528. 大數排序 | From: [116.241.147.123] | 發表日期 : 2018-08-09 21:10

#include <iostream>
#include <string>
#include <vector>
using namespace std;

vector<string> row(vector<string> &a){
  for(int i=0;i<a.size()-1;i++){
    for(int j=i+1;j<a.size();j++){
      int size=a[i].size();
      if(a[i][0]=='-'&&a[j][0]=='-'){
        if(a[j].size()>size){
          string k=a[i];
          a[i]=a[j];
          a[j]=k;
        }
        else{
          for(int m=1;m<size;m++){
            if(a[j][m]>a[i][m]){
              string k=a[i];
              a[i]=a[j];
              a[j]=k;
              break;
            }
          }
        }
      }
      else if(a[i][0]!='-'&&a[j][0]=='-'){
          string k=a[i];
          a[i]=a[j];
          a[j]=k;
      }
      else if(a[i][0]!='-'&&a[j][0]!='-'){
        if(size>a[j].size()){
          string k=a[i];
          a[i]=a[j];
          a[j]=k;
        }
        else{
          for(int m=0;m<size;m++){
            if(a[i][m]>a[j][m]){
              string k=a[i];
              a[i]=a[j];
              a[j]=k;
              break;
            }
          }
        }
      }
    }
  }
  return a;
}

int main(){
  int N;
  while(cin>>N){
    vector<string> vec;
    for(int i=0;i<N;i++){
      string a;
      cin>>a;
      vec.push_back(a);
    }
    row(vec);
    for(string s:vec){
      cout<<s<<endl;
    }
  }
}
 
#14859: Re:不知道自己哪裡錯了 請求開導謝謝


who_am_I (kruztw)

學校 : 國立臺灣師範大學
編號 : 54056
來源 : [36.224.144.147]
最後登入時間 :
2023-04-22 22:46:31
a528. 大數排序 | From: [110.26.193.190] | 發表日期 : 2018-08-09 22:09

當兩個都是負的

你會先比較長度再一個一個比較

但你想想,如果 vec[i] 比 vec[j] 長

還需要比較嗎?

 

不懂的話,輸入

2

-11

-2

就知道了

 
 
#14861: Re:不知道自己哪裡錯了 請求開導謝謝


who_am_I (kruztw)

學校 : 國立臺灣師範大學
編號 : 54056
來源 : [36.224.144.147]
最後登入時間 :
2023-04-22 22:46:31
a528. 大數排序 | From: [110.26.193.190] | 發表日期 : 2018-08-09 22:25

 



#include <iostream>

#include <string>

#include <vector>

using namespace std;

 

vector<string> row(vector<string> &a){

  for(int i=0;i<a.size()-1;i++){

    for(int j=i+1;j<a.size();j++){

      int size=a[i].size();

      if(a[i][0]=='-'&&a[j][0]=='-'){

        if(a[j].size()>size){

          string k=a[i];

          a[i]=a[j];

          a[j]=k;

        }

        else if(a[j].size() == size){

          for(int m=1;m<size;m++){

            if(a[j][m]>a[i][m]){

              string k=a[i];

              a[i]=a[j];

              a[j]=k;

              break;

            }

            else if(a[j][m] < a[i][m])

                 break;

          }

        }

      }

      else if(a[i][0]!='-'&&a[j][0]=='-'){

          string k=a[i];

          a[i]=a[j];

          a[j]=k;

      }

      else if(a[i][0]!='-'&&a[j][0]!='-'){

        if(size>a[j].size()){

          string k=a[i];

          a[i]=a[j];

          a[j]=k;

        }

        else if(a[j].size() == size){

          for(int m=0;m<size;m++){

            if(a[i][m]>a[j][m]){

              string k=a[i];

              a[i]=a[j];

              a[j]=k;

              break;

            }

            else if(a[i][m] < a[j][m])

                 break;

          }

        }

      }

    }

  }

  return a;

}

 

int main(){

  int N;

  while(cin>>N){

    vector<string> vec;

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

      string a;

      cin>>a;

      vec.push_back(a);

    }

    row(vec);

    for(int s = 0; s<vec.size(); s++){

      cout<<vec[s]<<endl;

    }

  }

}

 

 
ZeroJudge Forum