HDOJ 排序(用5分隔)

来源:互联网 发布:奥卡福体测数据 编辑:程序博客网 时间:2024/06/06 02:52


Problem Description
输入一行数字,如果我们把这行数字中的‘5’都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以‘0’开头,这些头部的‘0’应该被忽略掉,除非这个整数就是由若干个‘0’组成的,这时这个整数就是0)。

你的任务是:对这些分割得到的整数,依从小到大的顺序排序输出。

 

Input
输入包含多组测试用例,每组输入数据只有一行数字(数字之间没有空格),这行数字的长度不大于1000。  

输入数据保证:分割得到的非负整数不会大于100000000;输入数据不可能全由‘5’组成。
 

Output
对于每个测试用例,输出分割得到的整数排序的结果,相邻的两个整数之间用一个空格分开,每组输出占一行。
 

Sample Input
0051231232050775
 

Sample Output
0 77 12312320
 

学长的AC代码:

[cpp] view plaincopy
  1. #include <cstdio>       
  2. #include <iostream>         
  3. #include <cstring>      
  4. #include <algorithm>  
  5. using namespace std;      
  6. char str[1100];  
  7. int a[1100];  
  8. int main ()  
  9. {  
  10.     while(scanf("%s", &str)!=EOF)  
  11.     {  
  12.         int len = strlen(str);  
  13.         int k = 0, i;  
  14.         memset(a, 0 , sizeof(a));         
  15.         //  memset(void *s,int c,size_t n) 将已开辟内存空间 s 的首 n 个字节的值设为值 c;  
  16.         //  一字节一字节地把整个数组设置为一个指定的值,用于初始化;  
  17.           
  18.         for(i=0; i< len; i++)                  
  19.         {  
  20.             if(str[i] != '5')               //搜索开头的‘5’就向后(就跳过,不读入)  
  21.                 break;  
  22.         }  
  23.           
  24.         for(; i < len; ++i)                    
  25.         {  
  26.             if(str[i] != '5')  
  27.             {  
  28.                 for(; i<len && str[i] != '5'; ++i)<span style="white-space:pre">   </span>//<span style="white-space:pre"> </span>不是5且未结束  
  29.                 {  
  30.                     a[k] = a[k] * 10 + str[i] - '0';//<span style="white-space:pre">  </span>分离出5后面的数字;!!!  
  31.             }  
  32.                 k++;                    //  利用k记录数据的个数……  
  33.             }  
  34.         }  
  35.           
  36.         sort(a, a + k);  
  37.         //  sort(begin,end),表示一个范围,把数组a按升序排序;  
  38.         //  用#include <algorithm> sort即可使用</span>  
  39.           
  40.         for(int j = 0; j < k - 1; ++j)       //  输出除最后一个元素以外的其他元素  
  41.               
  42.         printf("%d\n", a[k - 1]);       //  最后一个元素结束输出空格   
  43.     }  
  44.       
  45.     return 0;  
  46. }                                     

小结:

其中的算法:
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]);
保证输出格式的正确

4.memset清零函数的使用!
Problem Description
输入一行数字,如果我们把这行数字中的‘5’都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以‘0’开头,这些头部的‘0’应该被忽略掉,除非这个整数就是由若干个‘0’组成的,这时这个整数就是0)。

你的任务是:对这些分割得到的整数,依从小到大的顺序排序输出。

 

Input
输入包含多组测试用例,每组输入数据只有一行数字(数字之间没有空格),这行数字的长度不大于1000。  

输入数据保证:分割得到的非负整数不会大于100000000;输入数据不可能全由‘5’组成。
 

Output
对于每个测试用例,输出分割得到的整数排序的结果,相邻的两个整数之间用一个空格分开,每组输出占一行。
 

Sample Input
0051231232050775
 

Sample Output
0 77 12312320
 

学长的AC代码:

[cpp] view plaincopy
  1. #include <cstdio>       
  2. #include <iostream>         
  3. #include <cstring>      
  4. #include <algorithm>  
  5. using namespace std;      
  6. char str[1100];  
  7. int a[1100];  
  8. int main ()  
  9. {  
  10.     while(scanf("%s", &str)!=EOF)  
  11.     {  
  12.         int len = strlen(str);  
  13.         int k = 0, i;  
  14.         memset(a, 0 , sizeof(a));         
  15.         //  memset(void *s,int c,size_t n) 将已开辟内存空间 s 的首 n 个字节的值设为值 c;  
  16.         //  一字节一字节地把整个数组设置为一个指定的值,用于初始化;  
  17.           
  18.         for(i=0; i< len; i++)                  
  19.         {  
  20.             if(str[i] != '5')               //搜索开头的‘5’就向后(就跳过,不读入)  
  21.                 break;  
  22.         }  
  23.           
  24.         for(; i < len; ++i)                    
  25.         {  
  26.             if(str[i] != '5')  
  27.             {  
  28.                 for(; i<len && str[i] != '5'; ++i)<span style="white-space:pre">   </span>//<span style="white-space:pre"> </span>不是5且未结束  
  29.                 {  
  30.                     a[k] = a[k] * 10 + str[i] - '0';//<span style="white-space:pre">  </span>分离出5后面的数字;!!!  
  31.             }  
  32.                 k++;                    //  利用k记录数据的个数……  
  33.             }  
  34.         }  
  35.           
  36.         sort(a, a + k);  
  37.         //  sort(begin,end),表示一个范围,把数组a按升序排序;  
  38.         //  用#include <algorithm> sort即可使用</span>  
  39.           
  40.         for(int j = 0; j < k - 1; ++j)       //  输出除最后一个元素以外的其他元素  
  41.               
  42.         printf("%d\n", a[k - 1]);       //  最后一个元素结束输出空格   
  43.     }  
  44.       
  45.     return 0;  
  46. }                                     

小结:

其中的算法:
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]);
保证输出格式的正确
0 0
原创粉丝点击