鱼C论坛

 找回密码
 立即注册
查看: 1471|回复: 6

[已解决]生日月份统计,这个输出要求的排序不太会

[复制链接]
发表于 2021-2-2 20:33:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
生日月份.jpg 生日.jpg
# include <stdio.h>

int main()
{
        int n,i,bir[11],mon;
        
        scanf("%d",&n);
        for (i = 0;i < n,i++)
        {
                scanf("%d",&mon);
                bir[mon-1]++
        }
        
        for (i = 0;i < n,i++)
        {
                printf();
        }
 }

这是我写的,只完成了输入部分,这个输出的排序要求怎么实现呀,求大佬指点
最佳答案
2021-2-2 21:34:32
你的这个一维数组好像不能实现吧。即使能实现也会特别麻烦。不帮你修改了,直接写一下吧
给你两种方法:一种是使用结构体,一种是使用二维数组
下面写一下结构体,二维数组可以自己去写
#include <stdio.h>
struct Birth{
    int month;
    int num;
}bir[12]={{1,0},{2,0},{3,0},{4,0},{5,0},{6,0},{7,0},{8,0},{9,0},{10,0},{11,0},{12,0}};

int main(void) { 
        int n,i,j,mon;
        Birth temp;
    scanf("%d",&n);
    for (i = 0;i < n;i++)
    {
        scanf("%d",&mon);
        bir[mon-1].num++;
    }
    for(i=0;i<11;i++)//冒泡排序
        for(j=0;j<11-i;j++)
        {
            if(bir[j].num<bir[j+1].num)
            {
                temp.num=bir[j+1].num;
                bir[j+1].num=bir[j].num;
                bir[j].num=temp.num;
                temp.month=bir[j+1].month;
                bir[j+1].month=bir[j].month;
                bir[j].month=temp.month;
            }
        }
    for(i=0;i<12;i++)
    {
        printf("%d %d\n",bir[i].month,bir[i].num);
    }
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-2-2 21:34:32 | 显示全部楼层    本楼为最佳答案   
你的这个一维数组好像不能实现吧。即使能实现也会特别麻烦。不帮你修改了,直接写一下吧
给你两种方法:一种是使用结构体,一种是使用二维数组
下面写一下结构体,二维数组可以自己去写
#include <stdio.h>
struct Birth{
    int month;
    int num;
}bir[12]={{1,0},{2,0},{3,0},{4,0},{5,0},{6,0},{7,0},{8,0},{9,0},{10,0},{11,0},{12,0}};

int main(void) { 
        int n,i,j,mon;
        Birth temp;
    scanf("%d",&n);
    for (i = 0;i < n;i++)
    {
        scanf("%d",&mon);
        bir[mon-1].num++;
    }
    for(i=0;i<11;i++)//冒泡排序
        for(j=0;j<11-i;j++)
        {
            if(bir[j].num<bir[j+1].num)
            {
                temp.num=bir[j+1].num;
                bir[j+1].num=bir[j].num;
                bir[j].num=temp.num;
                temp.month=bir[j+1].month;
                bir[j+1].month=bir[j].month;
                bir[j].month=temp.month;
            }
        }
    for(i=0;i<12;i++)
    {
        printf("%d %d\n",bir[i].month,bir[i].num);
    }
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-2 21:39:45 | 显示全部楼层
#include<stdio.h>

#include<stdlib.h>

void result(int month_ount[], int has_print[])
{
    int max = 0, max_index;
    for(int i = 12; i >= 0; --i)
    {
        if(max <= month_ount[i] && !has_print[i])
        {
            max = month_ount[i];
            max_index = i;
        }
    }
    has_print[max_index] = 1;
    printf("%d %d\n", max_index, max);;
}
int main()
{
    int n,month_count[13] = {0},mon, has_print[13] = {0};
    scanf("%d",&n);
    for(int i = 0;i < n;i++)
    {
        scanf("%d",&mon);
        month_count[mon]++;
    }
    for(int i = 1; i <= 13; ++i)
    {
        result(month_count, has_print);
    }
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-3 12:28:32 | 显示全部楼层
for循环嵌套,外面的for找位置,一个一个找,第一次找第一个数,里面的for比大小第一个数和其他所有数比较,那个数大就那个数占第一的位置
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-3 19:22:57 | 显示全部楼层
sunrise085 发表于 2021-2-2 21:34
你的这个一维数组好像不能实现吧。即使能实现也会特别麻烦。不帮你修改了,直接写一下吧
给你两种方法:一 ...

大佬,你的代码我看懂了,但是这里冒泡排序报错了,是怎么回事

                               
登录/注册后可看大图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-3 20:49:22 | 显示全部楼层
还不够好 发表于 2021-2-3 19:22
大佬,你的代码我看懂了,但是这里冒泡排序报错了,是怎么回事
#include <stdio.h>

int main(void){
        int nums[13] = {0}; 
        
        int n, tmp; 
        scanf("%d",&n);
        for(int i = 1; i <= n; i++){
                scanf("%d",&tmp);
                nums[tmp]++;
        }
        
        for(int i = 1; i < 13; i++){
                int pos = 1;
                for(int k = 1; k < 13; k++){
                        if(nums[pos] < nums[k])pos = k;
                }
                printf("%d %d\n",pos,nums[pos]);
                nums[pos] = -1;
        }
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-4 13:00:47 | 显示全部楼层
还不够好 发表于 2021-2-3 19:22
大佬,你的代码我看懂了,但是这里冒泡排序报错了,是怎么回事

我写的程序中temp不是数组啊。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-14 18:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表