ACM训练题第五题

这一题有借鉴网上优秀大神的答案,因为我用cin.get()好像怎样都不行,所以去学了下他们怎样用while (scanf_s("%s", str)!=EOF),然后自己尝试去写了出来。
##题目描述:

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

题解:
先判断是否为5,是的话就跳到下一个数,再用sum=sum*10+下一个数,这条万金油狮子去记录没遇到5之前的组合数的大小。然后用数组记录,再从小到大排序这个数组,我直接用了STL的算法了,偷了点懒。也可以自己重载一个排序算法的。代码如下:

#include<iostream>
#include<cstdio>
#include<algorithm> 
using namespace std;
int main()
{
	char str[1001];
	int num[1001],sum,k=0;
	while (scanf_s("%s", str)!=EOF)
	{
		for (int i = 0; str[i] != '\0';)
		{
			if (str[i] == '5')
			{
				i++;
				continue;
			}
			sum = 0;
			while (str[i] != '5'&&str[i]!='\0')
			{
				sum = sum * 10 + str[i]-'0';
				i++;
			}num[k++] = sum;
		}
	sort(num, num + k);
	for (int m = 0; m < k; m++)
	{
	if(m+1==k)
	{
	cout<<num[m];
	}
		else{
		    cout << num[m] << " ";
		}
		
	}
	cout<<endl;
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_43602944/article/details/84869313