• 4A


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

    Input

    输入包含多组测试用例,每组输入数据只有一行数字(数字之间没有空格),这行数字的长度不大于1000。   
    输入数据保证:分割得到的非负整数不会大于100000000;输入数据不可能全由‘5’组成。 

    Output

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

    Sample Input

    0051231232050775

    Sample Output

    0 77 12312320

    // 忘记考虑两个5之间没有数字的情况
     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #include<string.h>
     4 
     5 void selc_sort(int a[], int len, int flag)
     6 {
     7     int i, j, t, min;
     8     for(i=0;i<len-1;i++)
     9     {
    10         min=i;
    11         for(j=i+1;j<len;j++)
    12             if(a[min]>a[j]) min=j;
    13         if(min!=i)
    14         { t=a[i]; a[i]=a[min]; a[min]=t; }
    15     }
    16     if(flag)
    17     {
    18         for(i=0;i<len/2;i++)
    19         { t=a[i]; a[i]=a[len-1-i]; a[len-1-i]=t; }
    20     }
    21 }
    22 
    23 int main()
    24 {
    25     char a[1001], *p;
    26     int b[1000], len, i, flag, length;
    27     while(scanf("%s", a)!=EOF)
    28     {
    29         len=0;
    30         for(p=a;*p;p++)
    31             if(*p=='5') 
    32             {
    33                 *p='';
    34                 len++;
    35             }
    36         if(*(p-1)) len++;
    37         p=a;
    38         for(i=0;i<len;i++)
    39         {
    40             flag=1;
    41             while(*p=='0')
    42             {
    43                 p++;
    44                 if(*p=='')
    45                 { flag=0; break; }
    46             }
    47             if(flag)
    48             { b[i]=atoi(p); length=strlen(p)+1; p+=length; }
    49             else
    50             { b[i]=0; p++;}
    51         }
    52         selc_sort(b,len,0);
    53         for(i=0;i<len;i++)
    54         {
    55             if(i==len-1) printf("%d
    ", b[i]);
    56             else printf("%d ", b[i]);
    57         }
    58     }
    59     return 0;
    60 }
    WA
     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #include<string.h>
     4 
     5 void shell_sort(int a[], int len)
     6 {
     7     int i, j, t, gap;
     8     for(gap=len/2;gap>0;gap--)
     9         for(j=gap;j<len;j++)
    10             for(i=j;i-gap>=0&&a[i]<a[i-gap];i-=gap)
    11             { t=a[i]; a[i]=a[i-gap]; a[i-gap]=t; }
    12 }
    13 
    14 int main()
    15 {
    16     char a[1001], *p;
    17     int b[1000], len, i, flag, length;
    18     while(scanf(" %s", a)!=EOF)
    19     {
    20         len=0;
    21         for(p=a;*p;p++)
    22             if(*p=='5') 
    23             {
    24                 *p='';
    25                 len++;
    26             }
    27         if(*(p-1)) len++;
    28         p=a;
    29         for(i=0;i<len;i++)
    30         {
    31             flag=1;
    32             while(*p=='0')
    33             {
    34                 p++;
    35                 if(*p=='')
    36                 { flag=0; break; }
    37             }
    38             if(flag)
    39             {
    40                 if(strlen(p))
    41                 { b[i]=atoi(p); length=strlen(p)+1; p+=length; }
    42                 else 
    43                 { p++; i--; len--; }
    44             }    
    45             else
    46             { b[i]=0; p++;}
    47         }
    48         shell_sort(b,len);
    49         for(i=0;i<len;i++)
    50         {
    51             if(i==len-1) printf("%d
    ", b[i]);
    52             else printf("%d ", b[i]);
    53         }
    54     }
    55     return 0;
    56 }
    AC
  • 相关阅读:
    洛谷P3178 [HAOI2015]树上操作 题解 树链剖分+线段树
    洛谷P2590 [ZJOI2008]树的统计 题解 树链剖分+线段树
    2017年NOIP普及组复赛题解
    洛谷P3957 跳房子 题解 二分答案/DP/RMQ
    2016年NOIP普及组复赛题解
    2015年NOIP普及组复赛题解
    2014年NOIP普及组复赛题解
    洛谷P2258 子矩阵 题解 状态压缩/枚举/动态规划
    2013年NOIP普及组复赛题解
    第四章 选择结构(二)
  • 原文地址:https://www.cnblogs.com/goldenretriever/p/10355827.html
Copyright © 2020-2023  润新知