首页 > ACM题库 > HDU-杭电 > HDU 1106 排序-字符串-[解题报告] C++
2013
11-27

HDU 1106 排序-字符串-[解题报告] C++

排序

问题描述 :

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

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

输入:

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

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

输出:

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

样例输入:

0051231232050775

样例输出:

0 77 12312320

 

http://acm.hdu.edu.cn/showproblem.php?pid=1106

 

解题思路:这道题就是一个字符串处理啦,这道题我们要考虑几种情况

 

1.多个5连在一起

2.第一个字符为5

3.最后一个字符为5

 

#include <iostream>
#include <algorithm>
#include <string>
#define Max 1001
using namespace std;

char str[Max];
int Num[Max];

int main()
{
	int i,LenOfNum,value,len;
	while (scanf("%s",&str)!=EOF)
	{
		len = strlen(str);
		LenOfNum = 0;
		value = 0;
		for (i=0;i<len;i++)
		{
			if(str[i]=='5')
				continue;
			else
			{
				while(str[i]!='5')
				{
					if(i==len)
						break;
				    value=value*10+(str[i]-'0');
					i++;
				}
				Num[LenOfNum] = value;
				value=0;
				LenOfNum++;
			}	
		}
		sort(Num,Num+LenOfNum);
		for(i=0;i<LenOfNum-1;i++)
			printf("%d ",Num[i]);
		printf("%d/n",Num[LenOfNum-1]);
	}
	return 0;
}

  1. [email protected]

  2. 你的理解应该是:即使主持人拿走一个箱子对结果没有影响。这样想,主持人拿走的箱子只是没有影响到你初始选择的那个箱子中有奖品的概率,但是改变了其余两个箱子的概率分布。由 1/3,1/3 变成了 0, 2/3