首页 > 代码库 > zjut 1204 01串排序

zjut 1204 01串排序

01串排序  Time Limit:1000MS  Memory Limit:32768K

Description:

将01串首先按长度排序,长度相同时,按1的个数多少进行排序,1的个数相同时再按ASCII码值排序。

 

Input:

输入数据中含有一些01串,01串的长度不大于256个字符。

Output:

重新排列01串的顺序。使得串按基本描述的方式排序。

Sample Input:

10011111000011011010101101100

Sample Output:

01110010101010000110110011111




尝试1
#include <stdio.h>#include <stdlib.h>#include <string.h>char s[10000][256];int cmp ( const void *a , const void *b ){    return strcmp((char*)a,(char*)b);}int main(int argc, char *argv[]){   int i,n; n=0; while ( scanf("%s",s[n])!=EOF && s[n][0]!=# ) n++;   qsort(s,n,sizeof(s[0]),cmp);    for (i=0; i<n; i++)     printf("%s\n",s[i]);      return 0;}
View Code

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

 

char s[10000][256];

 

int cmp ( const void *a , const void *b )

         {         return strcmp((char*)a,(char*)b);      }

 

int main(int argc, char *argv[])

 

{  

           int i,n;  n=0;

 while ( scanf("%s",s[n])!=EOF && s[n][0]!=‘#‘ )   n++;

       qsort(s,n,sizeof(s[0]),cmp);    

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

     printf("%s\n",s[i]);   

   return 0;

}






尝试2
#include <stdio.h>#include <stdlib.h>#include <string.h>char s[10000][256];int cmp ( const void *a , const void *b ){     char *x=(char *)a,*y=(char *)b;if ( strlen(x)!=strlen(y) ) return  strlen(x)-strlen(y);  }int main(int argc, char *argv[]){   int i,n; n=0; while ( scanf("%s",s[n])!=EOF && s[n][0]!=# ) n++;   qsort(s,n,sizeof(s[0]),cmp);    for (i=0; i<n; i++)     printf("%s\n",s[i]);      return 0;}
View Code

 

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

char s[10000][256];

int cmp ( const void *a , const void *b )

{    

char *x=(char *)a,*y=(char *)b;

if ( strlen(x)!=strlen(y) )                  return  strlen(x)-strlen(y);        

     }

 

int main(int argc, char *argv[])

  int i,n;  

n=0;  

while ( scanf("%s",s[n])!=EOF && s[n][0]!=‘#‘ )      n++;  

 

qsort(s,n,sizeof(s[0]),cmp);  

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

printf("%s\n",s[i]);    

 return 0;

}

 

 

 

 

 

尝试 3

#include <stdio.h>#include <stdlib.h>#include <string.h>char s[10000][256];int cmp ( const void *a , const void *b ){     char *x=(char *)a,*y=(char *)b;  int i=0,j=0;if ( strlen(x)!=strlen(y) ) return  strlen(x)-strlen(y); while(x[i]) i++;while(y[j]) j++;if(i==j) return strcmp(x,y);if(i!=j) return i-j; }int main(int argc, char *argv[]){   int i,n; n=0; while ( scanf("%s",s[n])!=EOF && s[n][0]!=# ) n++;   qsort(s,n,sizeof(s[0]),cmp);    for (i=0; i<n; i++)     printf("%s\n",s[i]);      return 0;}
View Code

 

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

 

char s[10000][256];

int cmp ( const void *a , const void *b )

{       

 char *x=(char *)a,*y=(char *)b;  

        int i=0,j=0;

 

if ( strlen(x)!=strlen(y) )            return  strlen(x)-strlen(y);

 

               while(x[i])      i++;

             while(y[j])       j++;

if(i==j)           return strcmp(x,y);

if(i!=j)              return i-j;

}

int main(int argc, char *argv[])

  int i,n;  n=0;  

while ( scanf("%s",s[n])!=EOF && s[n][0]!=‘#‘ )     n++;

  qsort(s,n,sizeof(s[0]),cmp);   

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

   printf("%s\n",s[i]);  

    return 0;

}




尝试4



#include <stdio.h>#include <stdlib.h>#include <string.h>char s[10000][256];int cmp ( const void *a , const void *b ){     char *x=(char *)a,*y=(char *)b;  int i=0,j=0;  while(x[i]) i++;while(y[j]) j++;if ( strlen(x)!=strlen(y) ) return  strlen(x)-strlen(y); else if ( strlen(x)==strlen(y) ) return i-j; else return strcmp(x,y); }int main(int argc, char *argv[]){   int i,n; n=0; while ( scanf("%s",s[n])!=EOF && s[n][0]!=# ) n++;   qsort(s,n,sizeof(s[0]),cmp);    for (i=0; i<n; i++)     printf("%s\n",s[i]);      return 0;}
View Code

 

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

 

char s[10000][256];

int cmp ( const void *a , const void *b )

{    

char *x=(char *)a,       *y=(char *)b;  

int i=0,j=0;  

 

while(x[i]) i++;

while(y[j]) j++;

 

  if ( strlen(x)!=strlen(y) )                             return  strlen(x)-strlen(y);

      else    if ( strlen(x)==strlen(y) )                 return i-j;

                    else                              return strcmp(x,y);  

}

int main(int argc, char *argv[])

{

   int i,n;

 n=0;  

while ( scanf("%s",s[n])!=EOF && s[n][0]!=‘#‘ )            n++;  

 

qsort(s,n,sizeof(s[0]),cmp);  

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

printf("%s\n",s[i]);    

 return 0;

}

 

 

***********************************************************************************************************************************************

#include <stdio.h>#include <stdlib.h>#include <string.h>char s[10000][256];int cmp ( const void *a , const void *b ){   

char *x=(char *)a,*y=(char *)b; int i=0,j=0,k; k=0; while(x[k]) {if(x[k]==1) i++; k++;} k=0; while(y[k]) {if(y[k]==1) j++; k++;} if ( strlen(x)!=strlen(y) ) return strlen(x)-strlen(y); if (i!=j) return i-j; return strcmp(x,y); }int main(int argc, char *argv[]){ int i,n; n=0; while ( scanf("%s",s[n])!=EOF ) n++; qsort(s,n,sizeof(s[0]),cmp); for (i=0; i<n; i++) printf("%s\n",s[i]); return 0;}********************************#include <stdio.h>#include <stdlib.h>#include <string.h>char s[10000][256];int one(char *x){ int c=0,i=0; while (x[i]!=\0) { if (x[i]==1) c++; i++; } return c;}int cmp ( const void *a , const void *b ){ char *x=(char *)a,*y=(char *)b; int i=one(x),j=one(y),k; if ( strlen(x)==strlen(y) ) if (i==j) return strcmp(x,y); else return i-j; else return strlen(x)-strlen(y); }int main(int argc, char *argv[]){ int i,n; n=0; while ( scanf("%s",s[n])!=EOF ) n++; qsort(s,n,sizeof(s[0]),cmp); for (i=0; i<n; i++) printf("%s\n",s[i]); return 0;}**********************************************#include <stdio.h>#include <stdlib.h>#include <string.h>char s[10000][256];int one(char *x){ int c=0,i=0; while (x[i]!=\0) { if (x[i]==1) c++; i++; } return c;}int cmp ( const void *a , const void *b ){ char *x=(char *)a,*y=(char *)b; int i=one(x),j=one(y),k; if ( strlen(x)!=strlen(y) ) return strlen(x)-strlen(y); if (i!=j) return i-j; return strcmp(x,y); }int main(int argc, char *argv[]){ int i,n; n=0; while ( scanf("%s",s[n])!=EOF ) n++; qsort(s,n,sizeof(s[0]),cmp); for (i=0; i<n; i++) printf("%s\n",s[i]); return 0;}

 

 

 

#include <cstdio>#include <iostream>#include <string>#include <set>#include <algorithm>using namespace std;struct Comp{    bool operator ()(const string &s1,const string &s2)    {        if(s1.length()!=s2.length()) return s1.length()<s2.length();        int c1=count(s1.begin(),s1.end(),1);        int c2=count(s2.begin(),s2.end(),1);        return (c1!=c2?c1<c2:s1<s2);    }};int main(){    multiset<string,Comp>ms;    string s;    while(cin>>s)    {        ms.insert(s);    }    for(multiset<string,Comp>::iterator it=ms.begin();it!=ms.end();it++)    {        cout<<*it<<endl;    }    return 0;}