排序——HDU-1106
# 题目
题解
分别定义一个输入的char型数组和一个int型的输出数组;通过for循环查找输入数组中的每个字符如果遇到‘5’则跳过,将两个‘5’中间的字符转换成整数并保存在输出数组中。可以定义一个int型的k来记录是否有生成新的temp值,如果没有生成新的值,则不保存至输出数组,以此来跳过第一个字符为‘5’和多个连续‘5’的情况此时如果输入的字符全是‘5’也不会保存在输出数组中。最后将得到的输出数组用sort函数排序后输出即可。
代码实现
//HDU-1106
#include<iostream>
#include<algorithm>
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;
}
}