还不够好 发表于 2021-2-2 20:33:44

生日月份统计,这个输出要求的排序不太会

# include <stdio.h>

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

这是我写的,只完成了输入部分,这个输出的排序要求怎么实现呀,求大佬指点

sunrise085 发表于 2021-2-2 21:34:32

你的这个一维数组好像不能实现吧。即使能实现也会特别麻烦。不帮你修改了,直接写一下吧
给你两种方法:一种是使用结构体,一种是使用二维数组
下面写一下结构体,二维数组可以自己去写
#include <stdio.h>
struct Birth{
    int month;
    int num;
}bir={{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.num++;
    }
    for(i=0;i<11;i++)//冒泡排序
      for(j=0;j<11-i;j++)
      {
            if(bir.num<bir.num)
            {
                temp.num=bir.num;
                bir.num=bir.num;
                bir.num=temp.num;
                temp.month=bir.month;
                bir.month=bir.month;
                bir.month=temp.month;
            }
      }
    for(i=0;i<12;i++)
    {
      printf("%d %d\n",bir.month,bir.num);
    }
        return 0;
}

小甲鱼的铁粉 发表于 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 && !has_print)
      {
            max = month_ount;
            max_index = i;
      }
    }
    has_print = 1;
    printf("%d %d\n", max_index, max);;
}
int main()
{
    int n,month_count = {0},mon, has_print = {0};
    scanf("%d",&n);
    for(int i = 0;i < n;i++)
    {
      scanf("%d",&mon);
      month_count++;
    }
    for(int i = 1; i <= 13; ++i)
    {
      result(month_count, has_print);
    }
    return 0;
}

2736946915 发表于 2021-2-3 12:28:32

for循环嵌套,外面的for找位置,一个一个找,第一次找第一个数,里面的for比大小第一个数和其他所有数比较,那个数大就那个数占第一的位置

还不够好 发表于 2021-2-3 19:22:57

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

大佬,你的代码我看懂了,但是这里冒泡排序报错了,是怎么回事https://s3.ax1x.com/2021/02/03/yMvrtS.jpg

baige 发表于 2021-2-3 20:49:22

还不够好 发表于 2021-2-3 19:22
大佬,你的代码我看懂了,但是这里冒泡排序报错了,是怎么回事

#include <stdio.h>

int main(void){
        int nums = {0};
       
        int n, tmp;
        scanf("%d",&n);
        for(int i = 1; i <= n; i++){
                scanf("%d",&tmp);
                nums++;
        }
       
        for(int i = 1; i < 13; i++){
                int pos = 1;
                for(int k = 1; k < 13; k++){
                        if(nums < nums)pos = k;
                }
                printf("%d %d\n",pos,nums);
                nums = -1;
        }
        return 0;
}

sunrise085 发表于 2021-2-4 13:00:47

还不够好 发表于 2021-2-3 19:22
大佬,你的代码我看懂了,但是这里冒泡排序报错了,是怎么回事

我写的程序中temp不是数组啊。。。
页: [1]
查看完整版本: 生日月份统计,这个输出要求的排序不太会