zoukankan      html  css  js  c++  java
  • hdu 2019 数列有序!(c语言)

    hdu 2019 数列有序!

    点击做题网站链接

    题目描述

    Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)

    Problem Description
    有n(n<=100)个整数,已经按照从小到大顺序排列好,现在另外给一个整数x,请将该数插入到序列中,并使新的序列仍然有序。

    Input
    输入数据包含多个测试实例,每组数据由两行组成,第一行是n和m,第二行是已经有序的n个数的数列。n和m同时为0标示输入数据的结束,本行不做处理。

    Output
    对于每个测试实例,输出插入新的元素后的数列。

    Sample Input
    3 3
    1 2 4
    0 0

    Sample Output
    1 2 3 4

    题目难点

    1. 如何寻找插入点

    问题解答

    #include <stdio.h>
    int main()
    {
        int n,m,a[102];
        while( scanf("%d%d",&n,&m)!=EOF && m!=0 && n!=0 )
        {
            /*录入数组*/
            for(int i=0;i<n;++i)
                scanf("%d",&a[i]);
    
            if( m<a[0] )//如果m小于第一个元素
            {
                for(int i=n-1;i>=0;--i)
                    a[i+1]=a[i];//所有元素都后移
                a[0]=m;//把m覆盖第一个元素
            }
    
            if( m>a[n-1] )//如果m大于最后一个元素
                a[n]=m;//m就插在数列末尾
    
            if( m>=a[0] && m<=a[n-1] )//最后剩下的一种情况
            {
                for(int i=n-1;i>=0;--i)//从数组的最后一个元素来往前遍历
                    if( m>=a[i] )//找到下标i为插入点的前一个元素的下标
                    {
                        for(int j=n-1;j>i;--j)//把下标为i数组元素后面的所有元素都后移
                            a[j+1]=a[j];
                        a[i+1]=m;//插入m
                        break;//跳出循环,因为下标为i的元素前面所有的元素都符合m>=a[i],继续循环下去会出问题
                    }
            }
            
    		/*打印数组元素*/
            printf("%d",a[0]);
            for(int i=1;i<=n;++i)
                printf(" %d",a[i]);
            printf("
    ");
        }
        return 0;
    }
    
  • 相关阅读:
    英文综述如何写6
    英文综述如何写5
    英文综述如何写4
    英文综述如何写3
    英文综述如何写2
    英文综述如何写
    Python开发【第三篇】:Python基本数据类型
    Python开发【第二篇】:初识Python
    Python开发【第一篇】:目录
    第二十单元 计划任务crond服务
  • 原文地址:https://www.cnblogs.com/yuzilan/p/10626166.html
Copyright © 2011-2022 走看看