问题链接:HDU-1106
问题简述
输入一行数字,把这串数字中的‘5’看成空格,将这串数字分成一个个整型数,对分割成的整型数按从小到大排序。
思路及解题步骤
因为要对输入的这串数字进行一位一位地操作的话,应该输入一串字符才好操作,所以定义一个字符数组存放这串数字。首先要按照题目要求把这串数字用‘5’进行分割,分割后再转换成整型数存放在另一个整型数组中。在分割时要考虑多种情况,例如开头有‘5’,中间有连续几个‘5’,结尾有‘5’等等。最后再用冒泡排序将整型数组中的数按题目要求进行从小到大输出。
AC通过的C++语言程序如下:
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
char a[1002];
while (cin >> a)
{
int b[501];
int x = 0; int k = 0; int y, s, w, p = 0;
for (int i = 0; a[i] != '\0'; i++)
w = i;
if (a[w] != '5')
{
a[w + 1] = '5'; a[w + 2] = '\0';
}
if (a[0] == '5')
{
for (int i = 0; a[i] == '5'; i++)
p = i;
x = p + 1;
}
for (int i = p+1; a[i] != '\0'; i++)
{
if (a[i] == '5')
{
s = 0;
y = i;
for (int j = 1; j <= y - x; j++)
s = s + (a[y - j] - 48) * pow(10, j - 1);
b[k] = s;
k++;
a[y] = '0';
x = y;
for (int p = i; a[p + 1] == '5'; p++)
{
a[p + 1] = '0'; x++; i++;
}
}
}
for (int i = 1; i <= k - 1; i++)
for (int j = 0; j <= k - 1 - i; j++)
if (b[j] > b[j + 1])
{
int p;
p=b[j];
b[j] = b[j + 1];
b[j + 1] = p;
}
for (int i = 0; i <= k - 2; i++)
cout << b[i] << " ";
cout << b[k - 1] << endl;
}
return 0;
}