DAY1牛客题库1-3算法题:C语言版本(思路仅供参考)

news2025/2/4 6:43:18

挑战一下7天刷完牛客题库的108个题,今天是第一天思密达~一直以来都特别懒的做题,还是得勤奋点我觉得~今天只做了3个~嘻嘻明天去玩回家多弄几个~

1.输出字符串最后一个单词长度

【1】题目:

#include"stdio.h"
#include"string.h"

int main(){
	char input[100];
	int length,last=0,indexword=0;
	fgets(input,sizeof(input),stdin);
	length=strlen(input);
	for(int i=length-1;i>=0;i--){
	//判别是否属于单词
    if((input[i] >='a'&&input[i] <='z')||(input[i] >='A'&&input[i] <= 'Z')||(input[i] >='0'&&input[i]<='9')){
            //属于单词但是没标记过,进行标记
			if(!indexword){//!indexword表示indexword=0
			last=1;
			indexword=1;
		    }
            //标记过一次了,但是还有,last的长度加一
		    else{
		    last++;
	        }
	        }
            //遍历到的位置的元素不属于单词
            else{
        	if(indexword){
        		break;
			}
		  }
	    }
		printf("%d\n",last);
		return 0;
}

【2】算法思想:字符数组的输入输出都是一整套固定的,这里要解决的问题主要就是一个区分输入的是否是需要的单词的问题,因为存在输入会有空格的情况,所以我选择fgets()函数进行输入。这里单词定义是由数字和字母组成的句子,单词之间是空格隔开的,这里直接用for循环从后往前遍历,再用一个选择语句(input[i] >='a'&&input[i] <='z')||(input[i] >='A'&&input[i] <= 'Z')||(input[i] >='0'&&input[i]<='9')就行了,这个语句不会选到空格的地方(就是不会选到不同的单词了),然后用last进行计数即可~

2.计算某字符出现次数

【1】题目:

#include <stdio.h>
#include <string.h>
#include <ctype.h>//使用tolower和toupper函数

int main() {
    char input[10000]; //这里不知道为啥写1003或1003后的数字才对,按理说1001就行了,下面改了个指针版本的大家可以看看
    char c; // 需要统计的字符
    int count = 0; // 计数器
    int length;
    // 读取字符串
    fgets(input, sizeof(input), stdin);
    length = strlen(input);
    // 读取需要统计的字符
    scanf("%c", &c);
    // 遍历字符串,统计字符出现的次数
    for (int i = 0; i < length; i++) {
        // 如果字符 c 为大写或小写字母,统计其大小写形态出现的次数和
        if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
            if (input[i] == c || input[i] == tolower(c) || input[i] == toupper(c)) {
                count++;
            }
        }
        // 如果字符 c 为数字,统计其出现的次数
        else if (c >= '0' && c <= '9') {
            if (input[i] == c) {
                count++;
            }
        }
    }
    // 输出结果
    printf("%d\n", count);
    return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h> // 为tolower和toupper函数包含此头文件

int main() {
    char* input; // 定义字符指针
    char c; // 需要统计的字符
    int count = 0; // 计数器
    int length;

    // 动态分配内存存储输入的字符串
    input = (char*)malloc(10000 * sizeof(char));//这里空间之间写1000就对了,真是奇葩了
    if (input == NULL) {
        // 如果内存分配失败,输出错误信息并退出程序
        fprintf(stderr, "内存分配失败\n");
        return 1;
    }

    // 读取字符串
    fgets(input, 10000, stdin);
    // 获取输入字符串的长度
    length = strlen(input);
    // 读取需要统计的字符
    scanf("%c", &c);
    getchar(); // 吸收字符后的换行符

    // 使用字符指针遍历字符串
    char* p = input;
    while (p - input < length) { // 检查是否到达字符串末尾
        // 如果字符 c 为大写或小写字母,统计其大小写形态出现的次数和
        if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
            if (*p == c || *p == tolower(c) || *p == toupper(c)) {
                count++;
            }
        }
        // 如果字符 c 为数字,统计其出现的次数
        else if (c >= '0' && c <= '9') {
            if (*p == c) {
                count++;
            }
        }
        p++; // 移动指针到下一个字符
    }

    // 输出结果
    printf("%d\n", count);

    // 释放动态分配的内存
    free(input);
    return 0;
}

备注:tolowertoupper 是 C 语言标准库中的两个函数,它们用于字符的大小写转换,分别定义在 ctype.h 头文件中。tolower 函数用于将一个字符转换为小写,toupper 函数用于将一个字符转换为大写。

3.明明的随机数

#include <stdio.h>
#include <stdlib.h>

// 比较函数,用于 qsort
int compare(const void *a, const void *b) {
    return (*(int *)a - *(int *)b);
}

int main() {
    int n;
    scanf("%d", &n); // 读取数字个数
    int *array = (int *)malloc(n * sizeof(int)); // 使用动态分配数组存储输入的数字,因为我排序函数好用点
    // 读取 n 个数字
    for (int i = 0; i < n; i++) {
        scanf("%d", &array[i]);
    }

    // 使用 qsort 函数进行排序
    qsort(array, n, sizeof(int), compare);

    // 输出排序后的结果,由于数组中可能存在重复数字,所以只输出不重复的数字
    int lastPrinted = -1; // 用于记录上一次打印的数字
    for (int i = 0; i < n; i++) {
        if (array[i] != lastPrinted) {
            printf("%d\n", array[i]);
            lastPrinted = array[i];
        }
    }

    free(array); // 释放动态分配的内存
    return 0;
}

这里直接偷懒用qsort库函数了,其实啥排序都可以用的明天试试冒泡或者选择排序的~

备注:qsort 函数的原型如下:

void qsort(void *base, size_t num, size_t size, int (*comparator)(const void *, const void *));

  • base:指向要排序的数组的首地址的指针。
  • num:数组中的元素数量。
  • size:每个元素的大小(以字节为单位)。
  • comparator:一个指向比较函数的指针,该函数定义了数组中两个元素的比较规则,comparator 函数需要用户自定义。我直接定义上面了,直接看吧,我注释非常清楚再精细我也不知道怎么说了嘻嘻~

感觉自己还是太菜,菜还是要多练,写那么多一长串40多行,刚刚在牛客上看到一个大佬的第三题写法很好,不过是用c##的,我给他改成纯c了,这个写法真的非常厉害,10多行解决,我写那么啰嗦~这个连排序算法都不用,太牛了~

#include <stdio.h>

int main() {
    int N, n;
    while (scanf("%d", &N) != EOF) { // 使用 scanf 读取 N,并检查是否到达文件末尾
        int a[1001] = {0}; // 初始化数组 a,所有元素为 0
        while (N--) {
            scanf("%d", &n); // 使用 scanf 读取 n
            a[n] = 1; // 标记数字 n 为已出现
        }
        for (int i = 0; i < 1001; i++) {
            if (a[i]) {
                printf("%d\n", i); // 使用 printf 输出 i
            }
        }
    }
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2268307.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LeetCode 83 :删除排链表中的重复元素

题目&#xff1a; 地址&#xff1a;https://leetcode.cn/problems/remove-duplicates-from-sorted-list/ 方法一&#xff1a; 方法二&#xff1a; package com.zy.leetcode.LeetCode_04;/*** Author: zy* Date: 2024-12-25-15:19* Description: 删除排链表中的里复元素* …

微信流量主挑战:用户破16!新增文档转换(新纪元3)

朋友们&#xff0c;报告好消息&#xff01;我的小程序用户数量已经涨到16个了&#xff01;没错&#xff0c;真没拉朋友圈亲戚好友来撑场子&#xff0c;全靠实力&#xff08;和一点点运气&#xff09;吸引了16位陌生小伙伴光临&#xff01;这波进步&#xff0c;连我自己都感动了…

Java-38 深入浅出 Spring - AOP切面增强 核心概念 相关术语 Proxy配置

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 大数据篇正在更新&#xff01;https://blog.csdn.net/w776341482/category_12713819.html 目前已经更新到了&#xff1a; MyBatis&#xff…

基于Docker+模拟器的Appium自动化测试(二)

模拟器的设置 打开“夜神模拟器”的系统设置&#xff0c;切换到“手机与网络”页&#xff0c;选中网络设置下的“开启网络连接”和“开启网络桥接模式”复选框&#xff0c;而后选择“静态IP”单选框&#xff0c;在IP地址中输入“192.168.0.105”&#xff0c;网关等内容不再赘述…

【从零开始入门unity游戏开发之——C#篇36】C#的out协变和in逆变如何解决泛型委托的类型转换问题

文章目录 一、知识回顾和问题分析1、回顾强制转换和as转换知识2、问题分析 二、为什么泛型委托不行&#xff1f;1、泛型类型的严格类型检查2、**as 和强制类型转换不能直接使用** 三、如何解决这个问题&#xff1f;1、**协变&#xff08;out&#xff09;**2、**逆变&#xff08…

深度学习使用Anaconda打开Jupyter Notebook编码

新手入门深度学习使用Anaconda打开Jupyter Notebook编码 1. 安装Anaconda 第一种是Anaconda官网下载安装包&#xff0c;但是很慢&#xff0c;不太建议 第二种使用国内清华大学镜像源下载 选择适合自己电脑的版本&#xff0c;支持windows&#xff0c;linux系统 下载完之后自行…

Linux套接字通信学习

Linux套接字通信 代码源码&#xff1a;https://github.com/say-Hai/TcpSocketLearn/tree/CThreadSocket 在网络通信的时候, 程序猿需要负责的应用层数据的处理(最上层)&#xff0c;而底层的数据封装与解封装&#xff08;如TCP/IP协议栈的功能&#xff09;通常由操作系统、网络协…

git clone 和 conda 换源

文章目录 git clone 通过 sshconda 创建虚拟环境通过 env.yml 文件conda 换源 git clone 通过 ssh git clone ssh://用户名IP地址:/仓库名字.gitconda 创建虚拟环境通过 env.yml 文件 conda env create -f environment.ymlconda 换源 Step 1 生成 .bashrc 文件在家目录下。…

机床数据采集网关在某机械制造企业的应用

随着工业4.0时代的到来&#xff0c;智能制造已成为制造业转型升级的重要方向。数控机床作为现代制造业的核心设备&#xff0c;其运行状态和加工参数的数据实时采集与分析对于提升生产效率、优化生产流程具有关键意义。 背景概述 某机械制造企业拥有多台数控机床&#xff0c;这…

c# RSA加解密工具,.netRSA加解密工具

软件介绍 名称: c# RSA加解密工具,.netRSA加解密工具依赖.net版本: .net 8.0工具类型: WinForm源码下载 c# RSA加解密工具,.netRSA加解密工具 依赖项 WinFormsRSA.csproj <Project

穷举vs暴搜vs深搜vs回溯vs剪枝_全排列_子集

46. 全排列 递归解决&#xff1a;一开始选一个数&#xff0c;递归进入下一层再选一个新的数&#xff0c;直到到最后一个数。反会上一层遍历其它数。 每次递归到叶子节点就找到了一种组合&#xff0c;思路有了具体怎么实现&#xff1f; 1.怎么记录每条路径&#xff1f; 定义一个…

【Trick】获取kaggle账号的token和api(用于数据集下载)

0&#xff1a;操作背景 由于未来的科研需要用到Unet&#xff0c;但是运行学长的史山代码无法跑通&#xff0c;自己写了一个Unet并load学长的数据集效果也很差&#xff0c;于是打算从最最基础的开始&#xff0c;上github调用一个Unet并成功在公有数据集上跑一遍实例。 Unet的g…

VS Code AI开发之Copilot配置和使用详解

随着AI开发工具的迅速发展&#xff0c;GitHub Copilot在Cursor、Winsuf、V0等一众工具的冲击下&#xff0c;推出了免费版本。接下来&#xff0c;我将为大家介绍GitHub Copilot的配置和使用方法。GitHub Copilot基于OpenAI Codex模型&#xff0c;旨在为软件开发者提供智能化的代…

论文解读 | NeurIPS'24 Lambda:学习匹配先验以处理无标记垂悬问题场景下的实体对齐任务...

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; 点击 阅读原文 观看作者讲解回放&#xff01; 作者简介 尹航&#xff0c;上海交通大学博士生 内容简介 我们研究了带有无标记悬挂问题的实体对齐&#xff08;EA&#xff09;任务&#xff0c;即部分实体在另一个…

评分模型在路网通勤习惯分析中的应用——提出问题(1)

1、问题的由来、目标和意义 最近一段时间和公司其它业务部门讨论时&#xff0c;发现一个有趣的交通路网问题&#xff0c;车辆从S点行驶到V点共用时40分钟&#xff0c;这段时间内路网中的卡口摄像头识别到了车辆通过的信息。如下图所示&#xff1a; 设计师需要通过这些有限的路…

Spring Security day 11.23

ok了今天学习一个关于登录角色权限的管理框架&#xff0c;我们一起取看看吧 一.权限控制 1.1 认证和授权概念 前面我们已经完成了后台管理系统的部分功能&#xff0c;例如检查项管 理、检查组管理、套餐管理、预约设置等。接下来我们需要思 考 2 个问题&#xff1a; 问题 1 …

【IC验证】verilog及systemverilog特殊特性的分析

verilog及systemverilog特殊特性的分析 1.概述2.赋值延迟&#xff08;0&#xff09;总结&#xff08;1&#xff09;情况一&#xff1a;initial中进行阻塞赋值和非阻塞赋值&#xff08;不延迟&#xff09;a代码b 电路图c 结果 &#xff08;2&#xff09;时钟a 代码b 电路图c 结果…

FPGA流水线考虑因素

流水线考虑因素 另一种提升性能的方法是对拥有多个逻辑级数的长数据路径进行重新组织&#xff0c;并将其分配在多个时钟周期上。这种方法 以时延和流水线开销逻辑管理为代价&#xff0c;来达到加快时钟周期和提高数据吞吐量的目的。 由于 FPGA 器件带有大量的寄存器&#x…

关于 PCB线路板细节锣槽问题 的解决方法

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/144783817 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…

SQL创建和操纵表

本文介绍创建、更改和删除表的基本知识。 1. 创建表 SQL 不仅用于表数据操纵&#xff0c;而且还用来执行数据库和表的所有操作&#xff0c;包括表本身的创建和处理。一般有两种创建表的方法&#xff1a; 多数DBMS 都具有交互式创建和管理数据库表的工具&#xff1b;表也可以…