HDU 1106 排序
2015-01-21 20:36
183 查看
Description
输入一行数字,如果我们把这行数字中的‘5’都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以‘0’开头,这些头部的‘0’应该被忽略掉,除非这个整数就是由若干个‘0’组成的,这时这个整数就是0)。
你的任务是:对这些分割得到的整数,依从小到大的顺序排序输出。
Input
输入包含多组测试用例,每组输入数据只有一行数字(数字之间没有空格),这行数字的长度不大于1000。
输入数据保证:分割得到的非负整数不会大于100000000;输入数据不可能全由‘5’组成。
Output
对于每个测试用例,输出分割得到的整数排序的结果,相邻的两个整数之间用一个空格分开,每组输出占一行。
Sample Input
Sample Output
这题因为指针操作比较多,多以RE了N回。。。思路就是把所有5替换为空格,再用sscanf函数输入,然后快排,输出即可:
输入一行数字,如果我们把这行数字中的‘5’都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以‘0’开头,这些头部的‘0’应该被忽略掉,除非这个整数就是由若干个‘0’组成的,这时这个整数就是0)。
你的任务是:对这些分割得到的整数,依从小到大的顺序排序输出。
Input
输入包含多组测试用例,每组输入数据只有一行数字(数字之间没有空格),这行数字的长度不大于1000。
输入数据保证:分割得到的非负整数不会大于100000000;输入数据不可能全由‘5’组成。
Output
对于每个测试用例,输出分割得到的整数排序的结果,相邻的两个整数之间用一个空格分开,每组输出占一行。
Sample Input
0051231232050775
Sample Output
0 77 12312320
这题因为指针操作比较多,多以RE了N回。。。思路就是把所有5替换为空格,再用sscanf函数输入,然后快排,输出即可:
#include <iostream> #include <cstdio> #include <cstring> #include <fstream> using namespace std; typedef int type; void sort(type *begin,type *end) //手写快排。。。。 { end--; if(begin<end) { type *key=begin; type *low=begin; type *high=end; while(low<high) { while(low<high&&*high>=*key) high--; while(low<high&&*low<=*key) low++; swap(*low,*high); } swap(*key,*low); sort(begin,low); sort(low+1,end+1); } } int main() { ios::sync_with_stdio(false); // fstream cin("in.in"); char str[1010]; int num[1000]; while(cin>>str) { char *p; while((p=strchr(str,'5'))!=NULL) //把5变成空格,分割字符串 *p=' '; int n=0; for(p=str;*p!=0;p++) { if(*p!=' ') { sscanf(p,"%d",&num[n++]); //输入,处理不好就悲剧了。。。 if(!(p=strchr(p,' '))) break; } } sort(num,num+n); for(int i=0;i<n;i++) //排序输出 { cout<<num[i]; if(i!=n-1) cout<<" "; else cout<<endl; } } return 0; }