上一周至今,主要就是做了acm step,第一章全部做完了,第二章做了一些,以后基本应该就是一周一章,刚开始不太难,尽量快一些,做到现在还是比较简单吧,比赛什么的也就看了看题,想了想想不出来就放弃了,现在主要精力就在这个step上,有时候会翻书看看知识,觉得还是先学知识再说,贴一个比较有意思的题吧,这个应该是第一章ac比较少的了
排序
Problem Description
输入一行数字,如果我们把这行数字中的‘5’都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以‘0’开头,这些头部的‘0’应该被忽略掉,除非这个整数就是由若干个‘0’组成的,这时这个整数就是0)。
你的任务是:对这些分割得到的整数,依从小到大的顺序排序输出。
你的任务是:对这些分割得到的整数,依从小到大的顺序排序输出。
Input
输入包含多组测试用例,每组输入数据只有一行数字(数字之间没有空格),这行数字的长度不大于1000。
输入数据保证:分割得到的非负整数不会大于100000000;输入数据不可能全由‘5’组成。
输入数据保证:分割得到的非负整数不会大于100000000;输入数据不可能全由‘5’组成。
Output
对于每个测试用例,输出分割得到的整数排序的结果,相邻的两个整数之间用一个空格分开,每组输出占一行。
Sample Input
0051231232050775
Sample Output
0 77 12312320
其实是一个水题,就是把数位往前推一位或者不动
AC代码:
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char s[10001],*p;
int a[1001],v;
int n,i,j;
int cmp( const void *a,const void *b ){
return *(long int *)a-*(long int *)b;
}
int main( ){
while( scanf( "%s",s )!=EOF ){
n=0;
p=s;
while(*p ){
v=0;
if(*p=='5'){
p++;
continue;
}
while( *p!='5' ){
if( !*p ){
p--;
break;
}
v*=10;
v+=*p-'0';
p++;
}
a[n++]=v;
p++;
}
qsort( a,n,sizeof(long int),cmp );
for( i=0;i<n;++i )
printf( i==n-1?"%ld":"%ld ",a[i] );
puts("");
}
}
#include<string.h>
#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char s[10001],*p;
int a[1001],v;
int n,i,j;
int cmp( const void *a,const void *b ){
return *(long int *)a-*(long int *)b;
}
int main( ){
while( scanf( "%s",s )!=EOF ){
n=0;
p=s;
while(*p ){
v=0;
if(*p=='5'){
p++;
continue;
}
while( *p!='5' ){
if( !*p ){
p--;
break;
}
v*=10;
v+=*p-'0';
p++;
}
a[n++]=v;
p++;
}
qsort( a,n,sizeof(long int),cmp );
for( i=0;i<n;++i )
printf( i==n-1?"%ld":"%ld ",a[i] );
puts("");
}
}