• 数字排序 201503-2


    问题描述
      给定 n个整数,请统计出每个整数出现的次数,按出现次数从多到少的顺序输出。
    输入格式
      输入的第一行包含一个整数 n,表示给定数字的个数。
      第二行包含 n个整数,相邻的整数之间用一个空格分隔,表示所给定的整数。
    输出格式
      输出多行,每行包含两个整数,分别表示一个给定的整数和它出现的次数。按出现次数递减的顺序输出。如果两个整数出现的次数一样多,则先输出值较小的,然后输出值较大的。
    样例输入
    12
    5 2 3 3 1 3 4 2 5 2 3 5
    样例输出
    3 4
    2 3
    5 3
    1 1
    4 1
    评测用例规模与约定

      1 ≤ n ≤ 1000,给出的数都是不超过1000的非负整数。


    参考代码:

    #include <iostream>
    using namespace std;
    struct num{
    int s;
    int times = 1;
    };//数字的结构体
    int main(){
    int n;
    cin >> n;
    num *t = new num[n];
    for (int i = 0; i < n; i++)
    {
    cin >> t[i].s;
    }
    //对数组数字的大小进行排序
    num temp;
    for (int i = 0; i < n; i++)
    {
    for (int j = 0; j < n - 1; j++)
    {
    if (t[j].s>t[j + 1].s)
    {
    temp = t[j];
    t[j] = t[j + 1];
    t[j + 1] = temp;
    }
    }
    }
    //找到相同数字的改变次数,并留下一个表示次数,其余次数置为0
    int x = 1;
    for (int i = 1; i < n; i++)
    {
    if (t[i].s == t[i - 1].s){
    x++;
    t[i - 1].times = 0;
    }
    else{
    t[i - 1].times = x;
    x = 1;
    }
    }
    //判断最后一个数
    if (x != 1){
    t[n - 1].times = x;
    }
    //对数组次数进行冒泡排序
    for (int i = 0; i < n; i++)
    {
    for (int j = 0; j < n - 1; j++)
    {
    if (t[j].times<t[j + 1].times)
    {
    temp = t[j];
    t[j] = t[j + 1];
    t[j + 1] = temp;
    }
    }
    }
    //输出结果
    for (int i = 0; i < n; i++){
    if (t[i].times!=0){
    cout << t[i].s << " " << t[i].times << endl;
    }
    }
    return 0;
    }

    提交结果:

    代码长度编程语言评测结果得分时间使用空间使用
    880B C++ 正确 100 31ms 504.0KB


  • 相关阅读:
    Juniper路由器
    Juniper交换机维护
    [转载]让你瞬间开悟的图片
    [转载]生命科学-人体生物磁场及特异作用
    NAS与SAN有什么区别?
    使用串口终端安装AIX操作系统
    xml与java代码相互装换的工具类
    mybatis思维导图(二)
    mybatis思维导图(一)
    Spring思维导图(AOP篇)
  • 原文地址:https://www.cnblogs.com/bao-ZhangJiao/p/14268809.html
Copyright © 2020-2023  润新知