zoukankan      html  css  js  c++  java
  • 数字排序 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


  • 相关阅读:
    Palindrome Partitioning
    Minimum Path Sum
    Maximum Depth of Binary Tree
    Minimum Depth of Binary Tree
    Unique Binary Search Trees II
    Unique Binary Search Trees
    Merge Intervals
    Merge Sorted Array
    Unique Paths II
    C++ Primer Plus 笔记第九章
  • 原文地址:https://www.cnblogs.com/bao-ZhangJiao/p/14268809.html
Copyright © 2011-2022 走看看