排序
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 76744 Accepted Submission(s): 23387
Problem Description
输入一行数字,如果我们把这行数字中的‘5’都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以‘0’开头,这些头部的‘0’应该被忽略掉,除非这个整数就是由若干个‘0’组成的,这时这个整数就是0)。
你的任务是:对这些分割得到的整数,依从小到大的顺序排序输出。
Input
输入包含多组测试用例,每组输入数据只有一行数字(数字之间没有空格),这行数字的长度不大于1000。
输入数据保证:分割得到的非负整数不会大于100000000;输入数据不可能全由‘5’组成。
Output
对于每个测试用例,输出分割得到的整数排序的结果,相邻的两个整数之间用一个空格分开,每组输出占一行。
Sample Input
0051231232050775
Sample Output
0 77 12312320、
问题链接: 排序
问题简述:
输入一组长度可达1000位的数。这组数被“5”分割成若干组数。从小到大输入这些数。
问题分析:
因为要输入的位数较大,所以用字符来接受。接着找出每一组被分割出的数,然后加个排序。
程序说明:
本程序利用char[1000]来接收输入的数。当输入不为空时从第一个不为“5”的字符开始录入p数组中,直到出现“5”停止这个数的录入。循环这个过程。最后冒泡排序输出。
AC通过的C语言程序如下:
#include"stdafx.h"
#include <iostream>
using namespace std;
int main()
{
char num[1000] = { 0 }; //用户输入的数
int n, i; //n是记录被5分出了多少组数,i是记录目前在num【1000】中的位置
int p[500]; //保存被分出的数
while (cin >> num)
{
//初始化p,n,i
for (i = 0; i < 500; i++)
{
p[i] = -1;
}
n = 0;
i = 0;
//开始分析输入的数
while (num[i] != 0)
{
while (num[i] != 53)
{
if (num[i] == 0)break;
if (p[n] == -1)p[n] = 0;
p[n] = p[n] * 10 + int(num[i] - 48);
i++;
}
if (p[n] != -1)n++;
i++;
}
//按大小排序
for (int j = 0; j < n; j++)
{
for (int h = j; h < n; h++)
{
if (p[j] > p[h])
{
int t = p[j];
p[j] = p[h];
p[h] = t;
}
}
}
//按格式输出
for (int h = 0; h < n-1; h++)
{
cout << p[h]<<" ";
}
cout << p[n - 1];
cout << endl;
}
return 0;
}