【C语言】新的开始

行到云脚忽识路

大一漫无目的地过了一年,原本只想在原来的专业插科打诨,轻轻松松。什么“目标”啊,“规划”啊,统统丢到毕业后再考虑。但睡过了一个又一个的下午,嗨了一个又一个的夜晚,心里空落落的,“不得开心颜”。然后一个午后醒来,突然很想哭,不知道自己在干什么——这和当初说好的“惬意生活”不一样,没法过得心安理得。
其实早就知道了自己想干什么,但是很害怕去改变,去碰撞——新织好的窝那么comfortable。左思右想,不知道怎样的选择是对的,觉得那个让自己不好过的选择才是对自己好的(大概吧)。然后咬咬牙,闯进了计算机的世界。
现在,仍然不知道当初选择的对错,但日子确实不好过了(笑。
懵懵懂懂学了几个月,感受到了确实有写写博客的必要,记录自己的学习进程。

新的开始

在这里就先记录下自己写的一个题吧
众数问题

/*
//问题描述: 
给定含有n个元素的多重集合S,每个元素在S中出现的次数称为该元素的重数。多重集S中重数最大的元素称为众数。 
例如,S={1,2,2,2,3,5}。多重集S的众数是2,其重数为3。 
编程任务: 
对于给定的由n 个自然数组成的多重集S,编程计算S 的众数及其重数。

//输入
第1行多重集S中元素个数n(n<=50000);接下来的n 行中,每行有一个自然数。

//输出
输出文件有2 行,第1 行给出众数,第2 行是重数。(如果有多个众数,只输出最小的)

*/

#include<stdio.h>
#include<malloc.h>

int main(){
    int n;
    scanf("%d", &n);
    int *num, *hashTable;
    num = (int *)malloc(sizeof(int) * n);
    hashTable = (int *)malloc(sizeof(int) * n);

    //读入多重集的元素,并把对应的hashTable全部元素置0
    for(int i = 0; i < n; i++){
        scanf("%d", &num[i]);
        hashTable[i] = 0;
    }

    //冒泡排序,由小到大
    int temp;
    for(int i = 0; i < n; i++){
        for(int j = n - 1; j > i; j--){
            if(num[j] < num[j - 1]){
                temp = num[j - 1];
                num[j - 1] = num[j];
                num[j] = temp;
            }
        }
    }

    //记录每个元素的重复度
    for(int i = 0; i < n - 1; i++){
        for(int j = i; j < n; j++){
            if(num[i] == num[j]){
                hashTable[i]++;
            }
        }
    }

    //遍历寻找重复度最大的元素所在下标
    int pos = 0, maxn = hashTable[0];
    for(int i = 1; i < n; i++){
        if(hashTable[i] > maxn){
/*
 ** 注意这个大于号,即使有多个众数,最开始的那个仍不会被后来的替换,
 ** 而最开始的那个即使最小的那个众数,这便是进行冒泡排序的意义所在
 */
            maxn = hashTable[i];
            pos = i;
        }
    }

    printf("%d\n%d\n", num[pos], hashTable[pos]);

    return 0;
}

2020.10.28 写给过去的自己:
心中有千言万语,百般遗憾。但是如果能回到过去,我想我还是会做一样的选择,一样的懵懂过来。
不管以后如何,当初我挣扎过,深深思考过。不管是那个时候,还是现在做出的选择。
如果可以的话,我想对过去的自己说:不要那么苛责自己了,轻松一些。平庸也好,这不是堕落。心比天高,命比纸薄。
新的开始吧,新的自己。
统统丢到毕业才来考虑,毕业的时候想揍那时的自己一顿

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值