http://acm.njupt.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1024node
描述ios
將01串首先按長度排序,長度相同時,按1的個數多少進行排序,1的個數相同時再按ASCII碼值排序。測試
輸入this
輸入數據中含有一些01串,01串的長度不大於256個字符。spa
輸出code
從新排列01串的順序。使得串按基本描述的方式排序。blog
樣例輸入排序
10011111
00001101
1010101
1
0
1100內存
樣例輸出ci
0
1
1100
1010101
00001101
10011111
題目來源
ZJUT
1 #include<iostream> 2 #include<string> 3 //#include<fstream> 4 #include<vector> 5 using namespace std; 6 class Node 7 { 8 public: 9 string str; 10 int len; 11 int oneNum; 12 Node(string s) 13 { 14 str = s; 15 this->len = str.length(); 16 int tmp = 0; 17 for (size_t i = 0; i<len; i++) 18 if (str[i] == '1') tmp++; 19 oneNum = tmp; 20 } 21 }; 22 23 int cmp(Node& node1, Node& node2)//-1表示node1排在前面0表示node1和node2相等1表示node1排在node2後面 24 { 25 if (node1.len<node2.len) 26 return -1; 27 else if (node1.len>node2.len) return 1; 28 else //長度相等 29 { 30 if (node1.oneNum == node2.oneNum)//一的數目相等 31 { 32 size_t i; 33 for (i = 0; i<node1.len; i++){//比較ASCLL碼值 34 if (node1.str[i]<node2.str[i]) return -1; 35 else if (node1.str[i]>node2.str[i]) return 1; 36 } 37 if (i == node1.oneNum) return 0;//兩者相等 38 } 39 else if (node1.oneNum<node2.oneNum) return -1; 40 else //node1中1的數目比node2的多 41 return 1; 42 } 43 return 0; 44 } 45 int main() 46 { 47 //ifstream ifile("D:\\eee.txt"); 48 string str; 49 vector<Node> nVec; 50 while (cin>>str) 51 { 52 Node node(str); 53 if (true == nVec.empty()) 54 nVec.push_back(node); 55 else 56 { 57 vector<Node>::iterator iter = nVec.begin(); 58 for (iter; iter != nVec.end(); iter++){ 59 if (cmp(*iter, node) == 1){ 60 nVec.insert(iter, node); 61 break; 62 } 63 if (cmp(*iter, node) == 0){ 64 nVec.insert(iter, node); 65 break; 66 } 67 if (cmp(*iter, node) == -1) 68 ; 69 if (iter == nVec.end()-1){ 70 //nVec.insert(iter, node); 71 nVec.push_back(node); 72 break; 73 } 74 75 } 76 77 } 78 } 79 for (size_t i = 0; i<nVec.size(); i++) 80 { 81 cout << nVec[i].str << endl; 82 } 83 return 0; 84 }