01串排序 Time Limit:1000MS Memory Limit:32768K
Description:
将01串首先按长度排序,长度相同时,按1的个数多少进行排序,1的个数相同时再按ASCII码值排序。Input:
输入数据中含有一些01串,01串的长度不大于256个字符。Output:
重新排列01串的顺序。使得串按基本描述的方式排序。Sample Input:
10011111 00001101 1010101 1 0 1100
Sample Output:
0 1 1100 1010101 00001101 10011111
尝试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 ",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 )
{ 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 ",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 ",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;
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 ",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 ",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;
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 ",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 ",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;
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 ",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; // 1 的个数 比较
return strcmp(x,y); //ASC||码 比较
}
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
",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]!='