zoukankan      html  css  js  c++  java
  • 2009年北京航空航天大学计算机研究生机试真题,数组排序

    题目1167:数组排序

    时间限制:1 秒

    内存限制:32 兆

    特殊判题:

    提交:2107

    解决:654

    题目描述:

    输入一个数组的值,求出各个值从小到大排序后的次序。

    输入:

    输入有多组数据。
    每组输入的第一个数为数组的长度n(1<=n<=10000),后面的数为数组中的值,以空格分割。

    输出:

    各输入的值按从小到大排列的次序(最后一个数字后面没有空格)。

    样例输入:
    4
    -3 75 12 -3
    
    样例输出:
    1 3 2 1
    
    来源:
    2009年北京航空航天大学计算机研究生机试真题
    -------
    这道题的题干有点难理解,不看样例输入和输出你完全不知道它想表达什么意思。
    可以这样理解:将一个无序数组排序并删除重复数值以后,旧数组的每个值在新数组中的位序。
    这样通过以下三步可以达成目的:
    1、将无序数组排序,生成新数组。
    2、将新数组重复值删除。
    3、遍历旧数组,输出旧数组每个值在新数组中的位序。
    C++代码如下:
     1 #include <stdio.h>
     2 #include <algorithm>
     3 using namespace std;
     4 
     5 //定位函数,参数依次为:待查找数组,查找次数,查找值
     6 int locate(int array[], int n, int value)
     7 {
     8     for(int i=0; i<n; i++)
     9     {
    10         if(value == array[i])
    11             return i+1;
    12     }
    13 }
    14 //消除有序数组中的重复数值,参数依次为:待删除数组,数组长度。
    15 int unique(int result[], int length)
    16 {
    17     int i;
    18     int count = 0;
    19     //自己推出来的算法,还算简洁
    20     for(i = 0; i<length; i++)
    21     {
    22         if(result[i] == result[i+1])
    23             count++;
    24         else
    25             result[i+1-count] = result[i+1];
    26     }
    27     return count; //删掉的元素总数。
    28 }
    29 
    30 int main()
    31 {
    32     int input[10000], result[10000];
    33     int length, i;
    34     while( scanf("%d", &length) != EOF)
    35     {
    36         for(i = 0; i<length; i++)
    37         {
    38             scanf("%d", &input[i]);
    39             result[i] = input[i];
    40         }
    41         //今天刚学的STL排序函数,来自<algorithm>库,多快好省,比较赖皮。默认为升序排列。
    42         sort(result, result+length);
    43         //去除重复元素,count为删掉的元素数
    44         int count = unique(result, length);
    45 
    46         int resultLength = length - count;
    47         //遍历原数组,输出其每个元素在新数组中的位序
    48         for(i = 0; i< length; i++)
    49         {
    50             printf("%d", locate(result, resultLength, input[i]));
    51             if(i != length - 1)
    52                 printf(" ");
    53         }
    54 
    55     printf("\n");
    56     }
    57     return 0;
    58 }

     已AC:

    1 /**************************************************************
    2     Problem: 1167
    3     User: kkzxak47
    4     Language: C++
    5     Result: Accepted
    6     Time:70 ms
    7     Memory:1012 kb
    8 ****************************************************************/
     
    今天下午的成果,编程学习算是开了个头。
  • 相关阅读:
    Sqli-Labs less46-53
    Sqli-Labs less38-45
    Sqli-Labs less32-37
    移动web问题小结
    伪类与伪元素
    HTML5 视频直播
    判断鼠标移入移出元素时的方向
    Input操作文件
    利用WebStorm来管理你的Github
    webkit开发,app移动前端知识点
  • 原文地址:https://www.cnblogs.com/kkzxak47/p/cpp101.html
Copyright © 2011-2022 走看看