zoukankan      html  css  js  c++  java
  • hdu 1106

    排序

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
    Total Submission(s): 56209    Accepted Submission(s): 16422


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

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

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

    输入数据保证:分割得到的非负整数不会大于100000000;输入数据不可能全由‘5’组成。
     
    Output
    对于每个测试用例,输出分割得到的整数排序的结果,相邻的两个整数之间用一个空格分开,每组输出占一行。
     
    Sample Input
    0051231232050775
     
    Sample Output
    0 77 12312320
    低级做法:
    使用字符串保存数据,设置一个保存数字的数组,再一个个字符遍历过去,把字符添加到对应的数字数组的位置。(注意:这种做法要分是不是以字符“5”结尾)

    #include <stdlib.h>
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <vector>
    #include <algorithm>
    using namespace std;
    long long int a[1005];
    int main()
    {
    char ch[1005];
    while(scanf("%s",ch)!=EOF)
    {
    memset(a,0,sizeof(a));
    int len=strlen(ch),k=0,flag=1;
    for(int i=0; i<len; i++)
    {
    if(ch[i]=='5'&&flag==0)
    {
    k++;
    flag=1;
    }

    else if(ch[i]!='5')
    {
    flag=0;
    a[k]=a[k]*10+ch[i]-'0';
    }
    }
    if(ch[len-1]=='5')
    {
    sort(a,a+k);
    for(int i=0; i<k-1; i++)
    {
    printf("%lld ",a[i]);
    }
    printf("%lld ",a[k-1]);
    }
    else
    {
    sort(a,a+k+1);
    for(int i=0; i<k; i++)
    {
    printf("%lld ",a[i]);
    }
    printf("%lld ",a[k]);
    }

    }
    return 0;
    }

     高级一点的:

    使用strtok   和   atoi函数

    strtok函数是将字符串按所给的字符分开的函数(注意:使用一次之后要归NULL   它会自动指向下一个分的块)

    atoi  是一个将字符串的数据改成整形数据的函数   具体的可以百度一下

    #include <stdlib.h>
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <vector>
    #include <algorithm>
    using namespace std;
    int main()
    {
    int n,num;
    int a[1100];
    char ch[1100],*p;
    while(scanf("%s",ch)!=EOF)
    {
    num=0;
    p=strtok(ch,"5");
    while(p!=NULL)
    {
    a[num++]=atoi(p);
    p=strtok(NULL,"5");
    }
    sort(a,a+num);
    for(int i=0;i<num-1;i++)
    printf("%d ",a[i]);
    printf("%d ",a[num-1]);
    }
    return 0;
    }

  • 相关阅读:
    mysql 和navicat for mysql 安装教程
    Linux 下配置php开发环境
    RecyclerView的使用(四)
    RecyclerView的使用(三)
    RecyclerView的使用(二)
    RecyclerView的使用(一)
    适配器(一)
    ListView简介
    Android ListView 详解
    android SwipeRefreshLayout google官方下拉刷新控件
  • 原文地址:https://www.cnblogs.com/52why/p/6564845.html
Copyright © 2011-2022 走看看