鱼C论坛

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

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

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

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

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

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

  2. int main()
  3. {
  4.         int n,i,bir[11],mon;
  5.        
  6.         scanf("%d",&n);
  7.         for (i = 0;i < n,i++)
  8.         {
  9.                 scanf("%d",&mon);
  10.                 bir[mon-1]++
  11.         }
  12.        
  13.         for (i = 0;i < n,i++)
  14.         {
  15.                 printf();
  16.         }
  17. }
复制代码


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

  6. int main(void) {
  7.         int n,i,j,mon;
  8.         Birth temp;
  9.     scanf("%d",&n);
  10.     for (i = 0;i < n;i++)
  11.     {
  12.         scanf("%d",&mon);
  13.         bir[mon-1].num++;
  14.     }
  15.     for(i=0;i<11;i++)//冒泡排序
  16.         for(j=0;j<11-i;j++)
  17.         {
  18.             if(bir[j].num<bir[j+1].num)
  19.             {
  20.                 temp.num=bir[j+1].num;
  21.                 bir[j+1].num=bir[j].num;
  22.                 bir[j].num=temp.num;
  23.                 temp.month=bir[j+1].month;
  24.                 bir[j+1].month=bir[j].month;
  25.                 bir[j].month=temp.month;
  26.             }
  27.         }
  28.     for(i=0;i<12;i++)
  29.     {
  30.         printf("%d %d\n",bir[i].month,bir[i].num);
  31.     }
  32.         return 0;
  33. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

  6. int main(void) {
  7.         int n,i,j,mon;
  8.         Birth temp;
  9.     scanf("%d",&n);
  10.     for (i = 0;i < n;i++)
  11.     {
  12.         scanf("%d",&mon);
  13.         bir[mon-1].num++;
  14.     }
  15.     for(i=0;i<11;i++)//冒泡排序
  16.         for(j=0;j<11-i;j++)
  17.         {
  18.             if(bir[j].num<bir[j+1].num)
  19.             {
  20.                 temp.num=bir[j+1].num;
  21.                 bir[j+1].num=bir[j].num;
  22.                 bir[j].num=temp.num;
  23.                 temp.month=bir[j+1].month;
  24.                 bir[j+1].month=bir[j].month;
  25.                 bir[j].month=temp.month;
  26.             }
  27.         }
  28.     for(i=0;i<12;i++)
  29.     {
  30.         printf("%d %d\n",bir[i].month,bir[i].num);
  31.     }
  32.         return 0;
  33. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

  2. #include<stdlib.h>

  3. void result(int month_ount[], int has_print[])
  4. {
  5.     int max = 0, max_index;
  6.     for(int i = 12; i >= 0; --i)
  7.     {
  8.         if(max <= month_ount[i] && !has_print[i])
  9.         {
  10.             max = month_ount[i];
  11.             max_index = i;
  12.         }
  13.     }
  14.     has_print[max_index] = 1;
  15.     printf("%d %d\n", max_index, max);;
  16. }
  17. int main()
  18. {
  19.     int n,month_count[13] = {0},mon, has_print[13] = {0};
  20.     scanf("%d",&n);
  21.     for(int i = 0;i < n;i++)
  22.     {
  23.         scanf("%d",&mon);
  24.         month_count[mon]++;
  25.     }
  26.     for(int i = 1; i <= 13; ++i)
  27.     {
  28.         result(month_count, has_print);
  29.     }
  30.     return 0;
  31. }

复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-3 12:28:32 | 显示全部楼层
for循环嵌套,外面的for找位置,一个一个找,第一次找第一个数,里面的for比大小第一个数和其他所有数比较,那个数大就那个数占第一的位置
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

                               
登录/注册后可看大图
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

  2. int main(void){
  3.         int nums[13] = {0};
  4.        
  5.         int n, tmp;
  6.         scanf("%d",&n);
  7.         for(int i = 1; i <= n; i++){
  8.                 scanf("%d",&tmp);
  9.                 nums[tmp]++;
  10.         }
  11.        
  12.         for(int i = 1; i < 13; i++){
  13.                 int pos = 1;
  14.                 for(int k = 1; k < 13; k++){
  15.                         if(nums[pos] < nums[k])pos = k;
  16.                 }
  17.                 printf("%d %d\n",pos,nums[pos]);
  18.                 nums[pos] = -1;
  19.         }
  20.         return 0;
  21. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

我写的程序中temp不是数组啊。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-2 04:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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