C语言——每日一题

news2024/11/20 12:34:21

1.倒置字符串

倒置字符串

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Fj4UjmuL-1685105514864)(C:\Users\30539\AppData\Roaming\Typora\typora-user-images\image-20230526193111155.png)]

要将每一个单词逆序输出,首先可以将整个字符串内容都逆序输出,然后再将字符串中的每一个单词再进行逆序。

例如:逆序 i like beijing.

先逆序成:.gnijieb ekil i

再将每个单词逆序: beijing. like i

1.1 字符串的读取

先创建一个字符数组:char arr[101];(因为题目中的字符串长度最大是100,这里多出一个用于存放’\0’);

首先要从键盘读取字符串,有下列方式;

  • fgets(arr,100,stdin);,100是指最大的读取个数。
  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nrXjiqm1-1685105514865)(C:\Users\30539\AppData\Roaming\Typora\typora-user-images\image-20230526194031162.png)]
  • while ((arr[i++] = getchar() )!= '\n');
  • gets(arr);

这里要特别注意 while ((arr[i++] = getchar() )!= '\n');这种方式,这种方式读取的字符串编译器并不会在其后面自动追加一个'\0',不信请看

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rCpW4ovo-1685105514866)(C:\Users\30539\AppData\Roaming\Typora\typora-user-images\image-20230526195136720.png)]

当我们手动添加 '\0'之后:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9oTiVv55-1685105514866)(C:\Users\30539\AppData\Roaming\Typora\typora-user-images\image-20230526195221138.png)]

1.2 思路

先将整个字符串逆序,再将每个单词逆序。

【先逆序整个字符串】

void reverseall(char* arr, char* end)
{
    char tmp = *arr;
    while (arr < end)
    {
        tmp = *arr;
        *arr = *end;
        *end = tmp;

        arr++;
        end--;
    }
}

将字符数组的数组名和该数组的最后一个位置传递给该函数。当 arrend相遇时说明整个字符串逆序完成。

数组的最后一个元素的位置的计算方法: char* end = arr + strlen(arr) - 1;

【逆序每个单词】

cvoid reversepart(char* arr, char* end)
{
    char* start = arr;
    char* cur = arr;
    while (*cur)
    {
        while ((*cur != ' ') && (*cur != '\0'))
        {
            cur++;
        }
        reverseall(start, cur - 1);
        start = cur + 1;
        if (*cur != '\0')//至关重要!!不为\0才++
            cur++;
    }
}

逆序之后的数组的数组名和数组的最后一个位置传递给该函数。

创建两个指针变量 curstartstart用于记录每个单词的起始位置,cur用于寻找 start指向的单词的最后一个字母。startcur都从数组的第一个字符开始,因为单词与单词时间是以一个空格隔开的 ,所以 cur向后移动,直到遇到了空格就停止,start保持不动,此时将 startcur-1(这里一定要是cur-1)传递给reversall函数完成该单词的逆置。接着,将cur+1 赋值给startstart就又指向了下一个单词的首字母。cur指向他的后面的一个字母,又进行类似的操作。

注意:这里外层循环一定要判断 cur指向的是否为 '\0',若为 '\0'则说明该字符串已经全部逆置完成。内层循环 cur也要满足两个条件:1. 不为空格 2. cur指向的不是 ’\0'。当内层while循环跳出时,需要通过if语句进行判断cur。

总体实现:

void reverseall(char* arr, char* end)
{
    char tmp = *arr;
    while (arr < end)
    {
        tmp = *arr;
        *arr = *end;
        *end = tmp;

        arr++;
        end--;
    }
}
void reversepart(char* arr, char* end)
{
    char* start = arr;
    char* cur = arr;
    while (*cur)
    {
        while ((*cur != ' ') && (*cur != '\0'))
        {
            cur++;
        }
        reverseall(start, cur - 1);
        start = cur + 1;
        if (*cur != '\0')
            cur++;
    }
}
int main() {
    char arr[101] = { 0 };
    gets(arr);
    char* end = arr + strlen(arr) - 1;
    reverseall(arr, end);
    reversepart(arr, end);
    printf("%s", arr);
    return 0;
}

2.最小公倍数

最小公倍数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F05GV4sL-1685105514867)(C:\Users\30539\AppData\Roaming\Typora\typora-user-images\image-20230526202003918.png)]

2.1 思路

【思路一】

这两个数假设为a和b,他们相乘得到的数ret一定能将这两个数整除,但是ret是不是最小公倍数还不一定,所以可以将a和b相乘的结果c进行减减操作,假若也能得到能整除a和b的数,将c赋值给ret,如此往复,直到c不小于a和b中的最大值。但是这样做会超时,时间复杂度太高。

#include<stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	int c = a * b;
	int ret = c;
	int max = a > b ? a : b;
	while (c >= max)
	{
		if (c % a == 0 && c % b == 0)
			ret = c;
		c--;
	}
	printf("%d\n", ret);
}

【思路二】

公式法:最小公倍数=a和b的乘积/a和b的最大公约数

#include<stdio.h>
int getcf(int a, int b)//辗转相除法求最大公约数。
{
	int k = 1;
	while (k!=0)
	{
		k = a % b;
		a = b;
		b = k;
	}
	return a;
}
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	int c = getcf(a,b);
	int ret = a * b / c;
	printf("%d ", ret);
	return 0;
}

【思路三】

假设这两个数是5和7,他们的最小公倍数是35。通过观察发下,35不仅能整除5,也能整除7。那么35是怎么得到的呢?举个例子:先从5开始,用5/7,无法整除,让5*2=10,用10/7,无法整除,让5*3=15,用15/7,无法整除……直到让5*7=35,再让35/7,可以整除。大概思路就是让其中一个数a乘以一个从一开始逐步递增的数i,得到的结果假若能整除b,那么此时的a*i就是要求的最小公倍数。

#include <stdio.h>

int main() {
    long long n =0 ;
    long long m = 0;
    scanf("%lld %lld",&m,&n);
    int i =1;
    while(i*m%n)
    {
        i++;
    }
    printf("%lld",i*m);
    return 0;
}

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

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

相关文章

chatgpt赋能python:Python中字符串的转换方法

Python中字符串的转换方法 作为一门非常强大的编程语言&#xff0c;Python在字符串的处理上也有着非常丰富的功能。在Python中&#xff0c;字符串是非常重要的数据类型之一&#xff0c;也是最常用的数据类型之一。字符串在Python中有着很多的用途&#xff0c;比如表示文本数据…

驱动LSM6DS3TR-C实现高效运动检测与数据采集(3)----获取ID

概述 一旦传感器被正确初始化&#xff0c;可以通过SPI或I2C接口向传感器发送读取命令&#xff0c;并接收传感器返回的数据。这个读取过程包括获取LSM6DS3TR传感器提供的加速度计和陀螺仪数据&#xff0c;以及传感器对应的温度信息。 获取数据状态 STATUS_REG (1Eh)是该传感器…

破解mysql用户的密码

假如mysql数据库中有一个 prod_blb 用户&#xff0c;你作为root管理员&#xff0c;想知道它的密码&#xff0c;又不想修改它的密码。这个时候就只能通过获取到 prod_blb 用户加密的密码进程破译 1、MYSQL加密方式 MYSQL数据库的认证密码有两种方式&#xff0c;MYSQL 4.1版本之…

python笔记16_实例练习_二手车折旧分析p1

python数据分析练习&#xff0c;具体数据不放出。 分析实践很简单。目的不是做完&#xff0c;而是讲清楚每一步的目的和连带的知识点&#xff08;所以才叫学习笔记&#xff09; 0.数据准备 原始数据格式&#xff1a;csv文件 原始数据结构&#xff1a; 数据格式 字段名 int…

使用Python处理PDF文件的简介与实践

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

ol中不同区域加载不同底图

概述 写一篇水文&#xff0c;讲讲如果在openlayers中实现不同的区域加载不同的底图。 效果 实现 通过tileUrlFunction实现不同切片地址的请求。 <!DOCTYPE html> <html><head><title>XYZ</title><link rel"stylesheet" href&qu…

从源码学习Transformer

Transformer总体结构 近几年NLP领域有了突飞猛进的发展&#xff0c;预训练模型功不可没。当前利用预训练模型&#xff08;pretrain models&#xff09;在下游任务中进行fine-tune&#xff0c;已经成为了大部分NLP任务的固定范式。Transformer摒弃了RNN的序列结构&#xff0c;完…

chatgpt赋能python:Python中捕获异常

Python中捕获异常 什么是异常&#xff1f; 在Python编程中&#xff0c;异常&#xff08;Exceptions&#xff09;是程序执行时发生的错误或意外情况。这些异常可能导致程序崩溃或不能正常运行。为了避免这种情况的发生&#xff0c;我们需要捕获异常并在程序执行时进行相应的错…

SAP-MM-发票校验基本功能详解

一、MIRO抬头数据 1、基本数据 发票日期&#xff1a;一般是指凭证日期&#xff0c;对应FI中的凭证日期&#xff1b; 过账日期&#xff1a;发票和FI凭证的过账日期&#xff1b;这两个日期都可以作为付款条件的计算日期&#xff1b; 金额、税额&#xff1a;这个是指实际发票的…

【探索】机器指令翻译成 JavaScript

前言 前些时候研究脚本混淆时&#xff0c;打算先学一些「程序流程」相关的概念。为了不因太枯燥而放弃&#xff0c;决定想一个有趣的案例&#xff0c;可以边探索边学。 于是想了一个话题&#xff1a;尝试将机器指令 1:1 翻译 成 JavaScript&#xff0c;这样就能在浏览器中&am…

chatgpt赋能python:Python中按下某个按键的实现方法

Python中按下某个按键的实现方法 Python是一种广泛应用于各种领域的高级编程语言&#xff0c;可以用于编写各种类型的应用程序和工具。其中&#xff0c;它在游戏开发方面有着广泛的应用。而在游戏开发过程中&#xff0c;按键响应是至关重要的一个组成部分。本文将带领读者了解…

【测试基础01】

本期参考文献: 链接 一、安装mysql 1、安装mysql可以参考链接: 文章 2、安装mysql与python的工具 进行校验&#xff0c;查看是否安装成功 二、创建库 mycursor mydb.cursor() mycursor.execute("CREATE DATABASE ck") 执行语句创建库在mysql库里可以看到…

String字符串

文章目录 String类String常用的字符串处理方法StringBuffer类 StringBufferStringBuffer类中常用的方法StringBuilder类&#xff08;了解为主&#xff09;StringTokenzier类&#xff08;了解为主&#xff09; final属性&#xff0c;不可扩展&#xff0c;不可子类&#xff0c;不…

C++ list类成员函数介绍

目录 &#x1f914;list模板介绍&#xff1a; &#x1f914;特点&#xff1a; &#x1f914;list内存结构图解&#xff1a; &#x1f914; list的成员函数&#xff1a; &#x1f60a;list构造函数&#xff1a; &#x1f50d;代码示例&#xff1a; &#x1f50d;运行结果&…

python图像处理实战(二)—二值化图像与线性变换

&#x1f680;写在前面&#x1f680; &#x1f58a;个人主页&#xff1a;https://blog.csdn.net/m0_52051577?typeblog &#x1f381;欢迎各位大佬支持点赞收藏&#xff0c;三连必回&#xff01;&#xff01; &#x1f508;本人新开系列专栏—python图像处理 ❀愿每一个骤雨初…

什么是时间复杂度?

时间复杂度定义&#xff1a;在计算机科学中&#xff0c;时间复杂性&#xff0c;又称时间复杂度&#xff0c;算法的时间复杂度是一个函数&#xff0c;它定性描述该算法的运行时间。这是一个代表算法输入值的的长度的函数。时间复杂度常用大O符号表述&#xff0c;不包括这个函数的…

Python篇——数据结构与算法(第四部分:希尔排序及其讨论、计数排序、桶排序、基数排序)

1、希尔排序 希尔排序&#xff08;shell sort&#xff09;是一种分组插入排序算法首先取一个整数d1n/2&#xff0c;将元素分为d1个组&#xff0c;每组相邻两元素之间距离为d1&#xff0c;在各组内进行直接插入排序取第二个整数d2d1/2&#xff0c;重复上述分组排序过程&#xf…

SpringCloud Alibaba Seata 工作机制

SpringCloud Alibaba Seata Seata 工作机制 说明 之所以放在后面说工作机制是因为如果一开始就说的话理解困难 所以我们有了前面的列子和说明我们在结合本节内容会收获的多理解相对容易点 分布式事务过程分析 Seata 分布式事务处理过程-ID三组件模型 debug 梳理: 术语 先…

C++ deque类成员函数介绍

目录 &#x1f914;deque模板介绍&#xff1a; &#x1f914;deque特点&#xff1a; &#x1f914;deque内存结构图解&#xff1a; &#x1f914;deque各操作地址指向&#xff1a; &#x1f914; deque的成员函数&#xff1a; deque构造函数&#xff1a; &#x1f50d;代…

C++ 常见集合算法

目录 &#x1f914;常见集合算法&#xff1a; &#x1f642;1.set_intersection 容器交集 代码示例&#xff1a; 运行结果&#xff1a; &#x1f642;2.set_union 容器并集 图解&#xff1a; 代码示例&#xff1a; 运行结果&#xff1a; &#x1f642; 3.set_differe…