sicily 1036. Crypto Columns

提交几次都没过,冒泡排序一直在改。

然后干脆用STL的sort,方便简洁,一换代码就过了!

冒泡排序竟然都写错了!不过涉及两个数组确实挺麻烦的。

改后的代码用了全局变量,不符合软件工程的思想。但是刷sicily就先不顾忌这些了。

贴代码(错误的排序代码在注释里,有空再看):

#include <iostream>
#include <algorithm>
using namespace std;
string s;
int cmp(int i,int j)                            //降序排序
{
    if(((s[i]==s[j])&&(i<j))||s[i]<s[j])
        return 1;
    else return 0;
}
int main() {
    string t;
    int n, size, len;
    int r, c;
    int temp, ti;
    char a[100][10];
    int o[10], p[10];
    cin >> s;
    while( s != "THEEND" ) {
        cin >> t;
        size = t.size();
        n = s.size();
        len = size/n;
        for( c = 0; c < n; c++ ) {
            for( r = 0; r < len; r++ ) {
                a[r][c] = t[c*len+r];
            }
        }
        for( r = 0; r < n; r++ ) {
            o[r] = r;
            p[r] = r;
        }
        sort(o, o+n, cmp);
        //for ( r = 0; r < n; r++ ){
        //  temp = s[r];
        //  ti = r;
        //  for( c = r+1; c < n; c++ )  {
        //      if( temp > s[c] ) {
        //          temp = s[c];
        //          ti = c;
        //      }
        //  }
        //  if( ti != o[r] ){
        //      s[ti] = s[r];
        //      s[r] = temp;
        //      temp = o[ti];
        //      o[ti] = o[r];
        //      o[r] = temp;
        //  }
        //  /*for ( c = 0; c< n; c++ ) {
        //  cout << s[c];
        //  }
        //  cout << endl;
        //  for ( c = 0;c < n; c++ ) {
        //  cout << o[c];
        //  }
        //  cout << endl;*/
        //}
        /*for ( c = 0;c < n; c++ ) {
            cout << o[c];
        }
        cout << endl;*/
        for ( r = 0; r < n; r++ ) {
            p[o[r]] = r;
        }
        for( r = 0; r < len; r++ ) {
            for( c = 0; c < n; c++ ) {
                cout << a[r][p[c]];
            }
        }
        cout << endl;
        cin >> s;
    }
    return 0;
}

点赞