z_J_YYYYY 2021-08-25 15:03 采纳率: 50%
浏览 39
已结题

关于#c++#数字排序的问题

为什么这个题我这样的解法就不对呀?

img

#include <iostream>
#define endl '\n'
using namespace std;
int n=0;
int a[1000]={0};
int sign[1001]={0};

int findmax()
{
    int max=0;
    int maxnum=0;
    for(int i=0;i<1000;i++)
    {
        if(sign[i]==0)
        {
            continue;
        }
         else
         {
             if(sign[i]>maxnum)
             {
                 max=i;
                 maxnum=sign[i];
            }
        }
    } 
    return max;
}

int main()
{
    int t=0,num=0;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
        sign[a[i]]++;
    }
    for(int i=0;i<1000;i++)
    {
        if(sign[i]==0)
        {
            continue;
        }
         else
         {
             num++;
         }
    }
    for(int i=0;i<num;i++)
    {
        t=findmax();
        cout<<t<<" "<<sign[t]<<endl;
        sign[t]=0;
    }
} 
  • 写回答

3条回答 默认 最新

  • StjpStjp 2021-08-25 15:07
    关注
    如果我的回答对你有帮助,请点击旁边的采纳按钮,谢谢

    你这可能是思路没问题,写代码的时候糊涂了

    因为这个代码写到后面意思就不对了


    思路应该是这样的:

    1.将所有数字排序

    for(i=1;i<n;i++){
            for(j=i;j>0&&array[j]<array[j-1];j--){
                temp=array[j];
                array[j]=array[j-1];
                array[j-1]=temp;
            }
        }
    
    
    

    2.统计次数

    result[0][0]=array[0];
        result[0][1]=1;
        count=0; 
        for(i=1;i<n;i++){
            if(array[i]==result[count][0]){
                result[count][1]++;
            }else{
                count++;
                result[count][0]=array[i];
                result[count][1]=1;
            }
        }
    
    
    

    3.对次数进行排序

        for(i=1;i<=count;i++){
            for(j=i;j>0&&result[j][1]>result[j-1][1];j--){
                temp=result[j][0];
                result[j][0]=result[j-1][0];
                result[j-1][0]=temp;
                
                temp=result[j][1];
                result[j][1]=result[j-1][1];
                result[j-1][1]=temp;
            }
        }
    
    
    

    具体代码如下:

    /*
    问题描述 
     给定 n 个整数,请统计出每个整数出现的次数,按出现次数从多到少
    的顺序输出。
    输入格式 
     输入的第一行包含一个整数 n,表示给定数字的个数。
     第二行包含 n 个整数,相邻的整数之间用一个空格分隔,表示所给定
    的整数。
    输出格式 
     输出多行,每行包含两个整数,分别表示一个给定的整数和它出现的
    次数。按出现次数递减的顺序输出。如果两个整数出现的次数一样多,则
    先输出值较小的,然后输出值较大的。(1 ≤ n ≤ 1000,)
    样例输入 
    12
    5 2 3 3 1 3 4 2 5 2 3 5
    样例输出 
    3 4
    2 3
    5 3
    1 1
    4 1
    */
    #include<stdio.h>
    int main(void){
        int n;
        int i,j,temp,count;
        printf("请输入数字个数:");
        scanf("%d",&n);
        int array[n];
        int result[n][2];
        //输入数据 
        printf("请输入数据:");
        for(i=0;i<n;i++){
            scanf("%d",&array[i]);
        }
        //对数字排序
        for(i=1;i<n;i++){
            for(j=i;j>0&&array[j]<array[j-1];j--){
                temp=array[j];
                array[j]=array[j-1];
                array[j-1]=temp;
            }
        }
        //统计次数
        result[0][0]=array[0];
        result[0][1]=1;
        count=0; 
        for(i=1;i<n;i++){
            if(array[i]==result[count][0]){
                result[count][1]++;
            }else{
                count++;
                result[count][0]=array[i];
                result[count][1]=1;
            }
        }
        //对次数进行排序
        for(i=1;i<=count;i++){
            for(j=i;j>0&&result[j][1]>result[j-1][1];j--){
                temp=result[j][0];
                result[j][0]=result[j-1][0];
                result[j-1][0]=temp;
                
                temp=result[j][1];
                result[j][1]=result[j-1][1];
                result[j-1][1]=temp;
            }
        } 
        //输出
        for(i=0;i<=count;i++){
            printf("%d\t%d\n",result[i][0],result[i][1]);
        } 
        return 0;
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 9月2日
  • 已采纳回答 8月25日
  • 修改了问题 8月25日
  • 创建了问题 8月25日

悬赏问题

  • ¥15 Llama如何调用shell或者Python
  • ¥20 eclipse连接sap后代码跑出来空白
  • ¥20 谁能帮我挨个解读这个php语言编的代码什么意思?
  • ¥15 win10权限管理,限制普通用户使用删除功能
  • ¥15 minnio内存占用过大,内存没被回收(Windows环境)
  • ¥65 抖音咸鱼付款链接转码支付宝
  • ¥15 ubuntu22.04上安装ursim-3.15.8.106339遇到的问题
  • ¥15 blast算法(相关搜索:数据库)
  • ¥15 请问有人会紧聚焦相关的matlab知识嘛?
  • ¥15 网络通信安全解决方案