C语言——每日一题

news/2024/11/15 7:22:51/

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.ppmy.cn/news/110190.html

相关文章

ElasticSearch安装部署

ElasticSearch安装部署 简介 全文搜索属于最常见的需求&#xff0c;开源的 Elasticsearch &#xff08;以下简称 es&#xff09;是目前全文搜索引擎的首选。 它可以快速地储存、搜索和分析海量数据。维基百科、Stack Overflow、Github 都采用它。 Elasticsearch简称es&…

LC-1130. 叶值的最小代价生成树(贪心、区间DP、单调栈)

1130. 叶值的最小代价生成树 难度中等272 给你一个正整数数组 arr&#xff0c;考虑所有满足以下条件的二叉树&#xff1a; 每个节点都有 0 个或是 2 个子节点。数组 arr 中的值与树的中序遍历中每个叶节点的值一一对应。每个非叶节点的值等于其左子树和右子树中叶节点的最大…

.NET 8 Preview 4 发布

作者&#xff1a;Jon Douglas - Principal Program Manager, NuGet 翻译&#xff1a;Alan Wang 排版&#xff1a;Alan Wang 我们很高兴与大家分享在 .NET 8 预览版 4 中的所有新功能和改进&#xff01;这次发布是继预览版 3之后的更新。您将在这些月度发布中看到更多功能逐渐亮…

【paddlecls】多机多卡-linux(一:环境搭建)

1. 安装docker&#xff08;引擎&#xff09;&#xff1a; &#xff08;https://docs.docker.com/engine/install/ubuntu/&#xff09; Install Docker Engine on Ubuntu To get started with Docker Engine on Ubuntu, make sure you meet the prerequisites, and then follo…

C#,码海拾贝(29)——求解“大型稀疏方程组”的“全选主元高斯-约去消去法”之C#源代码,《C#数值计算算法编程》源代码升级改进版

大型稀疏矩阵线性化方程组的数值求解问题 广泛存在于工程实践尤其是计算机仿真领域 如水力管网计算&#xff0c;电力系统的大型导纳矩阵计算&#xff0c;高阶偏微分方程的数值求解&#xff0c;以及铸件充型过程与凝固过程的数值模拟等。 经常出现在科学和工程计算中, 因此寻找稀…

数组及详解冒泡排序

数组及详解冒泡排序 一维数组的创建和初始化一维数组的创建一维数组的初始化一维数组的应用一维数组在内存中的存储 二维数组的创建和初始化二维数组的创建二维数组的初始化二维数组的应用二维数组在内存中的存储 数组越界问题数组作为函数参数数组名的含义及特殊两个例子 冒泡…

Baumer工业相机堡盟工业相机如何使用CameraExplorer软件设置MultiROI模式以及该模式的优势以及行业应用

Baumer工业相机堡盟工业相机如何使用MultiROI模式以及该模式的优势以及行业应用 Baumer工业相机Baumer工业相机的MultiROI模式的技术背景Baumer工业相机使用CameraExplorer软件设置MultiROI模式1.开启Baumer工业相机MultiROI模式2.关闭Baumer工业相机MultiROI模式3.测试使用Bau…

手机安卓Termux搭建Hexo博客网站,发布公网访问

文章目录 1. 安装 Hexo2. 安装cpolar内网穿透3. 公网远程访问4. 固定公网地址 转载自cpolar极点云的文章&#xff1a;安卓手机使用Termux搭建Hexo个人博客网站【内网穿透公网访问】 Hexo 是一个用 Nodejs 编写的快速、简洁且高效的博客框架。Hexo 使用 Markdown 解析文章&#…