zoukankan      html  css  js  c++  java
  • HDU 1106 排序

                   排序

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

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

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

    输入数据保证:分割得到的非负整数不会大于100000000;输入数据不可能全由‘5’组成。
     
    Output
    对于每个测试用例,输出分割得到的整数排序的结果,相邻的两个整数之间用一个空格分开,每组输出占一行。
     
    Sample Input
    0051231232050775
     
    Sample Output
    0 77 12312320
     
    尽管是一道水题,也花了不少时间,说是分割下来的字符串不会大于100000000,也要注意像00000000100000000这种情况,数组的第二维开小了就错了!
     
    代码:
     1 #include<cstring>
     2 #include<cstdio>
     3 #include<algorithm>
     4 using namespace std;
     5 
     6 int main()
     7 {
     8  //freopen("in.txt","r",stdin);
     9  char sub[1005][25];
    10  char s[1005];
    11  int a[105];
    12  int i,k,t;
    13  while(scanf("%s",s)!=EOF)
    14  {
    15   int len=strlen(s);
    16   s[len]='5';
    17   s[len+1]='';//方便分割
    18   for(i=0;i<len+1;i++)
    19   if(s[i]!='5')break;
    20   for(k=0,t=0;i<len+1;i++)
    21   {
    22    if(s[i]=='5')
    23    {
    24     if(s[i+1]=='5')
    25     continue;//重复的5跳过
    26     else
    27     {
    28      sub[k][t]='';
    29      t=0;
    30      k++;
    31      continue;
    32     }
    33    }
    34    sub[k][t++]=s[i];
    35   }
    36   for(i=0;i<k;i++)
    37   a[i]=atoi(sub[i]);//将字符串转换成数字
    38   sort(a,a+k);
    39   for(i=0;i<k;i++)
    40   if(i==k-1)
    41   printf("%d
    ",a[i]);
    42   else
    43   printf("%d ",a[i]);
    44  }
    45  return 0;
    46 }
  • 相关阅读:
    Js~数组的操作push,pop,shift,unshift
    SqlServer 字段类型详解
    数据库设计三大范式
    HTML 解析类库HtmlAgilityPack
    设计模式六大原则
    表达式目录树
    在Web.config或App.config中的添加自定义配置
    史上最全 ——LINQ to SQL语句
    C# 加密解密类
    WebService登陆验证四种方式
  • 原文地址:https://www.cnblogs.com/homura/p/4668104.html
Copyright © 2011-2022 走看看