2021-11-23学习总结修改

第一篇博客写得过于草率,因此对此进行修改。

一、桶排基础

该题来自于我学校的刷题网站,本人在多位学长、同学的指教之下写出来的代码。由于本人基础一般,用的方法可能不是很好,有不足之处还请指教。代码如下:

#include<stdio.h>
int main()
{
    int i,n,k,b=0,c=0;
    int a[1001]= {0};        //定义并初始化数组
    scanf("%d %d",&n,&k);
    for(i=0; i<n; i++)
    {
        scanf("%d",&b);      //统计各数字出现的次数
        a[b]++;
    }
    for(i=1000; k; i--)
    {
        if(a[i]>0)
        {
            printf("%d ",i); //输出前k位大的数
            k--;
        }
    }
    return 0;
}

就本题而言所用到的桶排思路:

将价格(1~1000)平均分成1000组,多组输入,每输入一个数i,则对应的的a[i]加1,;最后输出时,a[i]有多大就输出几次,再根据题目要求,输出前k位的数。方法较为基础。

二、数组——擂台法

题目来源:

描述

又到了牛子爷的学习时间,这里有一些牛子爷开始学习的时间点(24小时制,同一天内),为了让牛子爷不睡懒觉好去内卷,请找出这一天内牛子爷可以学习的最早时间点

格式

输入格式

输入一个数n,代表牛子爷一天内可以学习的时间点的个数(1<=n<=1000)
输入n个时间点 时间点由两个整数组成,第一个整数代表时钟,第二个整数代表分钟

输出格式

输出牛子爷可以学习的最早时间点 时间点由两个整数组成,第一个整数代表时钟,第二个整数代表分钟(不足两位数的要补前导0)

样例

样例输入 Copy

3
22 32
3 52
5 51

样例输出 Copy

03 52		

 个人解答如下:

#include<stdio.h>
int main()
{
    int a[1100]= {0};
    int b[1100]= {0};
    int m,n,i,t,min1=0,min2=0;
    scanf("%d",&t);
    for(i=0; i<t; i++)
    {
        m=0,n=0;
        scanf("%d %d",&n,&m);
        a[i]=n;
        b[i]=m;
    }
    min1=a[0],min2=b[0];                擂台法,先将a[0],b[0]分别设为最小值
    for(i=1; i<t; i++)
    {
        if(a[i]<min1)
        {
            min1=a[i],min2=b[i];
        }
        if(a[i]>min1)
            continue;
        if(b[i]<min2)
        {
            min1=a[i],min2=b[i];
        }
        if(b[i]>min2)
            continue;
    }
    if(min1<10&&min2<10)               //题目设下的一个坑,注意要输出两位数
        printf("0%d 0%d",min1,min2);
    else if(min1<10)
        printf("0%d %d",min1,min2);
    else if(min2<10)
        printf("%d 0%d",min1,min2);
    else
        printf("%d %d",min1,min2);
    return 0;
}

解题思路:

  1. 多组输入,分别给数组a,b的数组元素赋对应的值;
  2. 设a[0],b[0]为最小值;
  3. 先将a[0]与后面的a[1]、a[2]......进行比较,若这些值大小都不相等,则输出其最小值,同时输出对应的b数组元素的值;
  4. 如果有a[i],a[j]...等的值都为最小值,则进行下一步比较——将b[i]与后面的b[j]......进行比较,输出其中的最小值,同时输出对应的a的数组元素。
  5. 注意因为题目要求至少输出两位数组,所以如果输出的数组元素a,b的值小于10的话,需要在前面加个0。

心得体会:1.这两题分别用到了桶排法、擂台法。

2.当算法的运行时间超限时,可以考虑使用桶排法,可以减小其时间复杂度。

这次修改可能仍然存在许多不足,还望斧正。

おすすめ

転載: blog.csdn.net/qq_62531911/article/details/121505687