C语言——每日一题

2023-11-07

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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言——每日一题 的相关文章

随机推荐

  • 小程序消息推送配置 Token校验失败,请检查确认

    一 小程序消息推送配置 Token校验失败 请检查确认 添加配置失败 原因 只要是没有echostr原样返回 就会报错 注意 返回的事echostr的内容 而不是key value格式 示例如下 return Content reqData
  • 大数据数据湖技术Hudi0.12.0版本源码编译

    0 介绍 Apache Hudi Hadoop Upserts Delete and Incremental 是下一代流数据湖平台 Apache Hudi将核心仓库和数据库功能直接引入数据湖 Hudi提供了表 事务 高效的upserts d
  • api的封装

    这是以 cnode中文社区的api 为例 值得一提的是有些请求可能要先进行url的编码 这是简易版的 use strict api 路径 get topics 主题首页 get topic id 主题详情 post accesstoken
  • 基于libevent, libuv和android Looper不断演进socket编程

    最近在做websocket porting的工作中 需要实现最底层socket读和写 基于同步读 libevent libuv和android Looper都写了一套 从中体会不少 1 同步阻塞读写 最开始采用同步阻塞读写 主要是为了快速实
  • 织梦网站搬迁后服务器错误,如何解决DEDECMS 5.7 将data目录迁移后网站地图无法打开和更新的问题...

    如何解决DEDECMS 5 7 将data目录迁移后网站地图无法打开和更新的问题 发布时间 2020 09 15 11 53 29 来源 亿速云 阅读 88 作者 小新 这篇文章主要介绍如何解决DEDECMS 5 7 将data目录迁移后网
  • Firefox about:config设置

    以下内容来自于转载 原文 https www jianshu com p 6e6937a9574c 地址栏输入about config 打开 搜索 书签在新标签页中打开 browser tabs loadBookmarksInTabs 默认
  • 安卓开发日志捕获,错误日志捕获catch,崩溃日志捕获,抓取崩溃日志

    import android content Context import android content SharedPreferences import android content pm PackageInfo import and
  • 从街边小吃到网上爆款,螺蛳粉是如何逆袭走红的呢?

    要说现当下最火的食物是什么 那螺蛳粉肯定占有一席之地 喝奶茶已经不是当下年轻人的续命方式了 现在只有会嗦粉的才能称得上是整条街最靓的崽 在今年五花八门的热搜中 可以说螺蛳粉长在了热搜上 从西瓜微数热搜榜来看 关于螺蛳粉的热搜可是数不胜数 在
  • windows系统升级node

    直接去官网下载对应版本的安装包 覆盖到原来的下载路径就可以了 注意一定要下载稳定版本的下载 Node js nodejs org https nodejs org zh cn download 查看node下载路径where node 查看
  • 线程池基础入门

    文章目录 线程池的状态 ThreadPoolExecutor 构造方法 Executors 固定大小的线程池 Executors 定时线程池 Executors 带缓冲线程池 Executors 单线程线程池 线程池常用方法 线程池的状态
  • 对接阿里云弹性收缩小结

    1 垂直伸缩 执行垂直伸缩任务时 系统自动完成停止目标实例 调整实例规格 启动目标实例一系列操作 这个相对简单 直接增加实例配置 2 弹性伸缩 参考 阿里云弹性伸缩初体验 偶影独行的博客 CSDN博客 Sina Visitor System
  • Android电池信息

    Android中电池信息 Battery information 的取得 这里介绍电池信息的取得 Android content BroadcastReceiver类 Android os BatteryManager类 电池信息的取得 调
  • Jenkins连接k8s的多种姿势

    目录 1 概述 2 同集群 3 跨集群 3 1 端口有什么 3 2 网络策略打通 3 3 证书的生成和配置 3 4 配置连接外部的 k8s 集群 4 测试验证 4 1 配置 pod template 4 2 自由风格构建测试 4 3 流水线
  • Vue计算属性实现及简写

    计算属性 1 定义 要用的属性不存在 要通过已有的属性计算得来 2 原理 底层借助了Object defineproperty方法提供的getter和setter 3 get函数什么时候执行 1 初次读取时会执行一次 2 当依赖的数据发生改
  • 博客网址

    博客不在更新 转到www fulus wang 转载于 https my oschina net fuluS blog 713434
  • pandas整表写入excel指定位置_pandas处理excel的常用方法技巧(上)

    1 导库 import pandas as pd 2 读取excel文件 这里要注意的就是第二个参数header如果不设置 pandas会默认把excel的第一行当作columns header None的时候pandas会为我们新生成从0
  • 使用深度学习模型CNN进行实时情绪检测研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现 1 概述 使用深度学习模型CNN进行实时情绪检测是一
  • 字符串、字符数组的截取函数:strncpy、strsub

    字符数组的截取函数 字符串截取函数
  • 【材质和贴图】

    1 贴图坐标的换算公式 a1 a0 Offset 1 Tilling
  • C语言——每日一题

    1 倒置字符串 倒置字符串 要将每一个单词逆序输出 首先可以将整个字符串内容都逆序输出 然后再将字符串中的每一个单词再进行逆序 例如 逆序 i like beijing 先逆序成 gnijieb ekil i 再将每个单词逆序 beijin