排序——HDU-1106

# 题目

题解

分别定义一个输入的char型数组和一个int型的输出数组;通过for循环查找输入数组中的每个字符如果遇到‘5’则跳过,将两个‘5’中间的字符转换成整数并保存在输出数组中。可以定义一个int型的k来记录是否有生成新的temp值,如果没有生成新的值,则不保存至输出数组,以此来跳过第一个字符为‘5’和多个连续‘5’的情况此时如果输入的字符全是‘5’也不会保存在输出数组中。最后将得到的输出数组用sort函数排序后输出即可。

代码实现

//HDU-1106
#include
#include
using namespace std;
int main()
{
	char in[1001];
	while (cin >> in)
	{
		int ou[1001];//这个必须在循环中,才能保证多次输入
		int i, j=0, k=1,l;
		int temp = 0;
		l = strlen(in);
		for ( i = 0; in[i]!='\0'; i++)
		{
			if (in[i] == '5'&& k ==0)//遇到‘5’则把前面的数据输入到ou
			{
				k = 1;
				ou[j++] = temp;
				temp = 0;
				continue;
			}
			if (in[i] != '5')//将两个‘5’中间的字符转换成整数
			{
				k = 0;//记录是否有生成新的temp值
				temp = temp * 10 + in[i] - '0';
			}
		}
		if (in[i - 1] != '5')//如果到了末尾,且最后一个字符不是‘5’,则把最后一个‘5’后面的数据输入到ou
		{
			ou[j++] = temp;
		}
		sort(ou,ou+j);//排序
		for (int i = 0; i < j-1; i++)
			cout << ou[i]<<" ";
		cout << ou[j-1]<<endl;
	}
}

完成

在这里插入图片描述

你可能感兴趣的:(OJ)