C语言每日一练-------Day(9)

本专栏为c语言练习专栏,适合刚刚学完c语言的初学者。本专栏每天会不定时更新,通过每天练习,进一步对c语言的重难点知识进行更深入的学习。
今日练习题关键字:字符个数统计 多数元素 投票法

💓博主csdn个人主页:小小unicorn

⏩专栏分类:C语言天天练

🚚代码仓库:小小unicorn的代码仓库🚚

🌹🌹🌹关注我带你学习编程知识

Day1

题目一:

题目描述:

题目来源:字符个数统计
编写一个函数,计算字符串中含有的不同字符的个数。字符在 ASCII 码范围内( 0~127 ,包括 0 和 127 ),换行表示结束符,不算在字符里。不在范围内的不作统计。多个相同的字符只计算一次

例如,对于字符串 abaca 而言,有 a、b、c 三种不同的字符,因此输出 3 。

数据范围: 1≤n≤500

解题思路:

运用的是HASH表 的思想,因为只有最多只有128种数据,所以只需维护一个大小为128的字符数组,让输入的字符作为数组下标,取出这个下标数组中的字符直接与输入的字符比较(不用for循环从头再查),如果相同则跳过,不同则赋值,让结果++,最后遇到'\n'结束循环,返回结果即可。

代码实现:

c 复制代码
#include<stdio.h>

int main() 
{
    int hash[128] = {0};
    char B;
    int count = 0;
    while (scanf("%1c", &B) != EOF) 
    {
        int asc = (int)B;
        if (hash[asc] != 1) 
        {
            count++;
            hash[asc] = 1;
        }
    }
    printf("%d", count - 1); //需要去掉最后的回车键
}

结果情况:

符合题目要求,问题得到解决。

题目二:

题目描述:

题目来源:多数元素

给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。

你可以假设数组是非空的,并且给定的数组总是存在多数元素。

解题思路:

投票法:

因为多数元素在数组里出现的次数绝对大于n/2,所以用不同元素消去相同元素,剩下的必然是相同元素

代码实现:

c 复制代码
int majorityElement(int* nums, int numsSize)
{
    int candidate=nums[0];//投票对象
    int count=1;//票数

    for(int i=1;i<numsSize;i++)//遍历投票对象
    {
        if(nums[i]==candidate)//投票对象相同,票数+1
        {
            count++;
        }
        else//投票对象不同,票数-1
        {
            count--;
            if(count<0)//该元素不是多数元素,更新投票对象candidate并把票数置1
            {
                candidate=nums[i];
                count=1;
            }
        }
    }

    return candidate;
}

结果情况:

符合题目要求,问题得到解决。

总结:

文章到这里就要告一段落了,有更好的想法或问题,欢迎评论区留言。

希望今天的练习能对您有所收获,咱们下期见!

相关推荐
2601_9555181814 小时前
C语言标准演化史:从K&R到GNU,谁才是正统?
c语言·gnu·标准演化·ansic·性能与可移植性
程序员zgh15 小时前
C++ 拷贝赋值运算符 详解
c语言·开发语言·c++
小婷一直在努力16 小时前
自定义类型:联合和枚举
c语言·联合和枚举
夕阳23016 小时前
做耳机开发,需要掌握哪些 C 语言知识?
c语言·开发语言·#蓝牙开发·#蓝牙技术
weixin_4568083817 小时前
【沁恒蓝牙开发】BLE常见错误码与解析
c语言·单片机·嵌入式硬件
HJX_072417 小时前
嵌入式软件C语言八股文复习笔记5——编译、链接与底层硬核机制
c语言·开发语言·笔记
haolin123.18 小时前
类和对象(下)
c语言·开发语言·c++
(Charon)20 小时前
【C++】手写 MySQL 连接池(三):异步任务队列与工作线程
c语言·c++
加油码21 小时前
共享内存详解:原理、系统调用与高性能进程间通信
linux·c语言·c++
Lzh编程小栈1 天前
【STM32底层精讲】RCC时钟系统超全详解(时钟树+源码+避坑指南)
c语言·stm32·单片机·嵌入式硬件·面试