Problem Description
输入一行数字,如果我们把这行数字中的‘5’都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以‘0’开头,这些头部的‘0’应该被忽略掉,除非这个整数就是由若干个‘0’组成的,这时这个整数就是0)。
你的任务是:对这些分割得到的整数,依从小到大的顺序排序输出。
你的任务是:对这些分割得到的整数,依从小到大的顺序排序输出。
Input
输入包含多组测试用例,每组输入数据只有一行数字(数字之间没有空格),这行数字的长度不大于1000。
输入数据保证:分割得到的非负整数不会大于100000000;输入数据不可能全由‘5’组成。
输入数据保证:分割得到的非负整数不会大于100000000;输入数据不可能全由‘5’组成。
Output
对于每个测试用例,输出分割得到的整数排序的结果,相邻的两个整数之间用一个空格分开,每组输出占一行。
Sample Input
0051231232050775
Sample Output
0 77 12312320
学长的AC代码:
- #include <cstdio>
- #include <iostream>
- #include <cstring>
- #include <algorithm>
- using namespace std;
- char str[1100];
- int a[1100];
- int main ()
- {
- while(scanf("%s", &str)!=EOF)
- {
- int len = strlen(str);
- int k = 0, i;
- memset(a, 0 , sizeof(a));
- // memset(void *s,int c,size_t n) 将已开辟内存空间 s 的首 n 个字节的值设为值 c;
- // 一字节一字节地把整个数组设置为一个指定的值,用于初始化;
- for(i=0; i< len; i++)
- {
- if(str[i] != '5') //搜索开头的‘5’就向后(就跳过,不读入)
- break;
- }
- for(; i < len; ++i)
- {
- if(str[i] != '5')
- {
- for(; i<len && str[i] != '5'; ++i)<span style="white-space:pre"> </span>//<span style="white-space:pre"> </span>不是5且未结束
- {
- a[k] = a[k] * 10 + str[i] - '0';//<span style="white-space:pre"> </span>分离出5后面的数字;!!!
- }
- k++; // 利用k记录数据的个数……
- }
- }
- sort(a, a + k);
- // sort(begin,end),表示一个范围,把数组a按升序排序;
- // 用#include <algorithm> sort即可使用</span>
- for(int j = 0; j < k - 1; ++j) // 输出除最后一个元素以外的其他元素
- printf("%d\n", a[k - 1]); // 最后一个元素结束输出空格
- }
- return 0;
- }
小结:
其中的算法:
1. sort (直接进行排序);
2. a[k] = a[k] * 10 + str[i] - '0'; 将字符转化为数字并存储;
3. for(int j = 0; j < k - 1; ++j)
printf("%d ", a[j]);
printf("%d\n", a[k - 1]); 保证输出格式的正确
printf("%d ", a[j]);
printf("%d\n", a[k - 1]); 保证输出格式的正确
4.memset清零函数的使用!
Problem Description
输入一行数字,如果我们把这行数字中的‘5’都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以‘0’开头,这些头部的‘0’应该被忽略掉,除非这个整数就是由若干个‘0’组成的,这时这个整数就是0)。
你的任务是:对这些分割得到的整数,依从小到大的顺序排序输出。
你的任务是:对这些分割得到的整数,依从小到大的顺序排序输出。
Input
输入包含多组测试用例,每组输入数据只有一行数字(数字之间没有空格),这行数字的长度不大于1000。
输入数据保证:分割得到的非负整数不会大于100000000;输入数据不可能全由‘5’组成。
输入数据保证:分割得到的非负整数不会大于100000000;输入数据不可能全由‘5’组成。
Output
对于每个测试用例,输出分割得到的整数排序的结果,相邻的两个整数之间用一个空格分开,每组输出占一行。
Sample Input
0051231232050775
Sample Output
0 77 12312320
学长的AC代码:
- #include <cstdio>
- #include <iostream>
- #include <cstring>
- #include <algorithm>
- using namespace std;
- char str[1100];
- int a[1100];
- int main ()
- {
- while(scanf("%s", &str)!=EOF)
- {
- int len = strlen(str);
- int k = 0, i;
- memset(a, 0 , sizeof(a));
- // memset(void *s,int c,size_t n) 将已开辟内存空间 s 的首 n 个字节的值设为值 c;
- // 一字节一字节地把整个数组设置为一个指定的值,用于初始化;
- for(i=0; i< len; i++)
- {
- if(str[i] != '5') //搜索开头的‘5’就向后(就跳过,不读入)
- break;
- }
- for(; i < len; ++i)
- {
- if(str[i] != '5')
- {
- for(; i<len && str[i] != '5'; ++i)<span style="white-space:pre"> </span>//<span style="white-space:pre"> </span>不是5且未结束
- {
- a[k] = a[k] * 10 + str[i] - '0';//<span style="white-space:pre"> </span>分离出5后面的数字;!!!
- }
- k++; // 利用k记录数据的个数……
- }
- }
- sort(a, a + k);
- // sort(begin,end),表示一个范围,把数组a按升序排序;
- // 用#include <algorithm> sort即可使用</span>
- for(int j = 0; j < k - 1; ++j) // 输出除最后一个元素以外的其他元素
- printf("%d\n", a[k - 1]); // 最后一个元素结束输出空格
- }
- return 0;
- }
小结:
其中的算法:
1.
sort (直接进行排序);
2.
a[k] = a[k] * 10 + str[i] - '0'; 将字符转化为数字并存储;
3.
for(int j = 0; j < k - 1; ++j)
printf("%d ", a[j]);
printf("%d\n", a[k - 1]); 保证输出格式的正确
printf("%d ", a[j]);
printf("%d\n", a[k - 1]); 保证输出格式的正确