标签:online judge c++ 排序
对N个长度最长可达到1000的数进行排序。
输入第一行为一个整数N,(1<=N<=100)。
接下来的N行每行有一个数,数的长度范围为1<=len<=1000。
每个数都是一个正数,并且保证不包含前缀零。
可能有多组测试数据,对于每组数据,将给出的N个数从小到大进行排序,输出排序后的结果,每个数占一行。
3 11111111111111111111111111111 2222222222222222222222222222222222 33333333
33333333 11111111111111111111111111111 2222222222222222222222222222222222
C++代码:
#include <iostream> #include <vector> #include <algorithm> #include <string> using namespace std; bool cmp(string s1,string s2) { if(s1.size()==s2.size()) { for(int i=0;i<s1.size();i++) { if(s1[i]!=s2[i])return s1[i]<s2[i]; } return true; } else return s1.size()<s2.size(); } int main() { int n; while(cin>>n&&n>=1&&n<=100) { vector<string> vec; string str; for(int i=0;i<n;i++) { cin>>str; if(str.size()>1000)return 1; vec.push_back(str); } sort(vec.begin(),vec.end(),cmp); for(vector<string>::iterator j=vec.begin();j!=vec.end();j++) cout<<*j<<endl; } return 0; } /************************************************************** Problem: 1190 User: Carvin Language: C++ Result: Accepted Time:30 ms Memory:1528 kb ****************************************************************/
最初的时候是这个思路,不过实在是找不到问题出在哪!
C++代码(WA,真机调试没问题):
#include<iostream> #include <stdio.h> #include <stdlib.h> #include <string.h> using namespace std; struct x{ char str[10001]; unsigned int len; }; int main() { int N; x T[101]; while(cin>>N) { for(int i=0;i<N;i++) { cin>>T[i].str; T[i].len=strlen(T[i].str); }//for x temp; for(int a=0;a<N;a++) { for(int b=0;b<N-1;b++) { if(T[b].len>T[b+1].len) { temp=T[b+1]; T[b+1]=T[b]; T[b]=temp; }//if else if(T[b].len==T[b+1].len) { int l=T[b].len; for(int i=0;i<l;i++) { if((T[b].str[i]-'0')>(T[b+1].str[i]-'0')) { temp=T[b+1]; T[b+1]=T[b]; T[b]=temp; break; }//if }//for } }//for b }//for for(int m=0;m<N;m++) cout<<T[m].str<<endl; }//while return 1; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:online judge c++ 排序
原文地址:http://blog.csdn.net/carvin_zh/article/details/46917491