排序

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 46057    Accepted Submission(s): 13221

Problem Description
输入一行数字,如果我们把这行数字中的‘5’都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以‘0’开头,这些头部的‘0’应该被忽略掉,除非这个整数就是由若干个‘0’组成的,这时这个整数就是0)。

你的任务是:对这些分割得到的整数,依从小到大的顺序排序输出。

 
Input
输入包含多组测试用例,每组输入数据只有一行数字(数字之间没有空格),这行数字的长度不大于1000。

输入数据保证:分割得到的非负整数不会大于100000000;输入数据不可能全由‘5’组成。

 
Output
对于每个测试用例,输出分割得到的整数排序的结果,相邻的两个整数之间用一个空格分开,每组输出占一行。
 
Sample Input
0051231232050775
 
Sample Output
0 77 12312320

今天HDU11页上找找还有没有适合我这种菜鸟的水题时看别人的题解突然看到了这题。让我想起来做过的HDU——2072统计单词数。心里感觉这个东西可以进行输入重定向,但是就是百度了半天没百度到。还是去找了2072的代码(好吧2072也不完全是自己写的)。发现了这个玩意儿 istringstream(加上空格方便记忆,i string stream)

有了它这题写法比百度上的题解简单多了。偷个小懒嘿嘿

代码:

#include<iostream>
#include<string>
#include<sstream>
#include<algorithm>
using namespace std;
int power(int n,int cishu)//主要坑点还有这个,pow函数有误差,不如自己写一个
{
int sum=1;
for (int i=1; i<=cishu; i++)
{
sum=sum*n;
}
return sum;
}
int sto(const string a)//string to int转换函数。
{
int i,sum=0;
int len=a.size();
for (i=len-1; i>=0; i--)//有个好处可以不管开头的0,从后往前的话前导0乘以权重还是0
{
sum+=(a[i]-'0')*power(10,len-1-i);
}
return sum;
} int main(void)
{
string str,k;
while(getline(cin,str))
{
for(int i=0; i<str.size(); i++)
if(str[i]=='5') str[i]=' ';//将题目中要求的5替换为空格 istringstream sin(str);//进行输入重定向,格式为istringstream 重新定义的输入函数名称(源头字符串)
int num[1000]={},t=0,i;
while(sin>>k)//从str中向临时变量k输入,用这个好处就是可以直接忽略掉中间的空格跟,不管几个
{
num[t]=sto(k);
t++;//记录个数
}
sort(num,num+t); for(i=0; i<t; i++)
{
if(i!=t-1)
cout<<num[i]<<' ';
else
cout<<num[i]<<endl;
}
}
return 0;
}

刚学了vector和STL一些函数,加上之前又去再次了解了下istringstream,发现重定向后可以直接进行数字或者其他的输入,不一定要是string。因此修改了下上面的代码并且用vector和对容器的sort,以及迭代器。

代码:

#include<iostream>
#include<sstream>
#include<algorithm>
#include<vector>
using namespace std;
int main(void)
{
string str;
while(getline(cin,str))
{
for (int i=0; i<str.size(); i++)
{
if(str[i]=='5')
str[i]=' ';
}
int t;
vector<int>list;
istringstream sin(str);
while(sin>>t)
{
list.push_back(t);
}
sort(list.begin(),list.end());
for (vector<int>::iterator it=list.begin(); it!=list.end(); it++)
{
if(it!=list.end()-1)
cout<<*it<<' ';
else
cout<<*it<<endl;
}
}
return 0;
}

最新文章

  1. 使用BitArray判断素数
  2. 使用IdleTest进行TDD单元测试驱动开发演练(1)
  3. 《Entity Framework 6 Recipes》中文翻译系列 (11) -----第三章 查询之异步查询
  4. MFC---static控件加载图片
  5. 免费的无次数限制的各类API接口(2)
  6. 【转】修改xampp的mysql默认密码
  7. http协议请求规则与dotNet的解析
  8. Windows 7下可以使用的各个命令语句+C#打开
  9. catkin_simple 的使用
  10. Solarized Colorscheme for IntelliJ IDEA
  11. dapper支持oracle游标
  12. phpstrom 快捷使用方式
  13. UWP 页面间传递参数(常见类型string、int以及自定义类型)
  14. [HNOI 2004]敲砖块
  15. mysql 8.0 密码加密方式的坑
  16. java 接口详解
  17. 1506.01186-Cyclical Learning Rates for Training Neural Networks
  18. 关于Bell数的一道题目
  19. 使用phpstorm进行PHP断点调试
  20. P4450 双亲数

热门文章

  1. windows10下安装TensorFlow Object Detection API
  2. Oracle 11g 新特性 – HM(Hang Manager)简介
  3. UVA1610 PartyGame 聚会游戏(细节题)
  4. coredata 删除与更新
  5. 组件的通信 :provide / inject 对象进入后,就等于不用props,然后内部对象,直接复制可以接受数组,属性不能直接复制,可以用Object.assgin覆盖对象,或者Vue的set 双向绑定数据
  6. Python Select模型
  7. iOS 解决ipv6问题
  8. 代码方式使用AutoLayout (NSLayoutConstraint + Masonry)
  9. d3网址
  10. Falsy Bouncer-freecodecamp算法题目