C语言——每日一题

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://xiahunao.cn/news/253470.html

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

相关文章

Matlab实现曲线拟合的最小二乘法

实验条件 实验用例 x0102030405060708090y6867.166.465.664.661.861.060.860.460 实验要求 利用曲线拟合的线性最小二乘法求被逼近函数f(x)在点x55处的近似值&#xff0c;并画出实验数据和直线。 代码实现 X[0,10,20,30,40,50,60,70,80,90]; Y[68,67.1,66.4,65.6,64.6,61.…

达梦数据库8安装教程

第一步&#xff1a;双击驱动 注意&#xff1a;如果双击显示没有驱动&#xff0c;则安装WinCDEmu软件。 第二步&#xff1a;双击setup.exe安装包 第三步&#xff1a;选择时区 第四步&#xff1a;验证key文件 因为我们是免费试用&#xff0c;所以没有key文件&#xff0c;直接下一…

线性回归——最小二乘法

线性回归&#xff1a;自变量和因变量之间是线性关系&#xff0c;例如&#xff1a;h a0a1x1a2x2…anxn。线性回归预测的一般步骤&#xff1a;假设特征变量Xi满足线性关系&#xff0c;然后根据给定的训练数据训练出一个模型&#xff0c;最后通过此模型进行预测。线性回归的根本就…

最小二乘法多项式曲线拟合原理与实现(数学公式详细推导,代码方面详细注释)

最小二乘法概念&#xff1a; 最小二乘法&#xff08;又称最小平方法&#xff09;是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据&#xff0c;并使得这些求得的数据与实际数据之间误差的平方和为最小。最小二乘…

对「曲线拟合」和「最小二乘法」的个人理解

在工程实践中&#xff0c;经常遇到类似的问题: 我们做了n次实验&#xff0c;获得了一组数据 然后&#xff0c;我们希望知道x和y之间的函数关系。所以我们将其描绘在XOY直角坐标系下&#xff0c;得到下面这么一张点云图&#xff1a; 然后&#xff0c;我们发现&#xff0c;x和y…

最小二乘法实现曲线拟合

说明&#xff0c;本文章的源代码来着于网络&#xff0c;本人已在实际项目中反复使用过&#xff0c;证明没问题。 1.简介 已知曲线上的n个点&#xff0c;可以使用某条曲线去拟合&#xff0c;使得整体上所有的点都逼近曲线&#xff0c;可以使用不同的角度去判断整体逼近&#x…

最小二乘法直线拟合汇总

原文链接&#xff1a;https://www.jianshu.com/p/1c4f3edbaa47 首先最小二乘法是面对不连续的离散点。 它的本质是求某些参数&#xff0c;估计值在整体下可以使误差ε最小。 对于离散点的直线拟合、曲线拟合是在满足误差最小的基础上&#xff0c;得出可以用数学函数式表达的可…

线性回归----最小二乘法

目录 线性回归&#xff1a;就是把离散的数据拟合到一条直线上&#xff0c;获得一个直线方程来近似的描述这些离散的数据 最小二乘法&#xff1a;是用数学公式直接求解线性回归方程的参数的方法。 例&#xff1a; 使用美国汽车油耗数据中的排量disp作为X&#xff0c;油耗MPG作…

曲线拟合——最小二乘拟合(附代码)

曲线拟合——最小二乘拟合&#xff08;附代码&#xff09; 曲线拟合1 一元函数的最小二乘拟合1.1 线性回归&#xff08;直线的最小二乘拟合&#xff09;1.1.1 直线的最佳拟合方法1.1.2 如何计算1.1.3 误差量化分析 1.2 多项式回归&#xff08;多项式的最小二乘拟合&#xff09;…

插值与拟合 (二) : 曲线拟合的线性最小二乘法

目录 1 线性最小二乘法 最小二乘准则 系数 的确定 1.2 函数 的选取 常用的拟合曲线&#xff1a;直线、多项式曲线、双曲线、指数曲线 2 最小二乘法的 Matlab 实现 2.1 解方程组方法 2.2 多项式拟合方法 apolyfit(x0,y0,m) …

最小二乘法多项式曲线拟合及其python实现

最小二乘法多项式曲线拟合及其python实现 多项式曲线拟合问题描述最小二乘法针对overfitting&#xff0c;加入正则项python实现运行结果 多项式曲线拟合问题描述 问题描述&#xff1a;给定一些数据点&#xff0c;用一个多项式尽可能好的拟合出这些点排布的轨迹&#xff0c;并给…

数值分析——曲线拟合的最小二乘法

文章目录 一、曲线拟合的最小二乘原理1. 超定方程组的最小二乘解解题方法&#xff1a; 2. 直线拟合3. 多项式拟合 一、曲线拟合的最小二乘原理 拟合曲线定义&#xff1a;求近似函数 φ(x), 使之 “最好” 的逼近f(x) ,无需满足插值原则. 这就是曲线拟合问题。 &#xff08;时间…

最小二乘法的曲线拟合方法在MATLAB中的实现

一、实验内容 已知一组实验数据如下表&#xff0c;求它的拟合曲线。 x(i)12345 f(i)44.5688.5 w(i)21311 二、程序清单与运行结果 M文件代码如下&#xff1a; function Smypolyfit(X,F,W,m,n) % mypolyfit输出通过最小二乘法求得的拟合曲线并绘图验证 % 例如&#xff1a; …

UFS 1-UFS架构简介1

UFS 1-UFS架构简介 1 UFS是什么&#xff1f;1.1 UFS1.2 一般特征1.2.1 Target performance1.2.2 Target host applications1.2.3 Target device types1.2.4 Topology1.2.5 UFS Layering 1.3 Interface Features1.3.1 Three power supplies1.3.2 Signaling as defined by [MIPI-…

最小二乘法线性拟合和2次曲线拟合算法

最近由于项目要求&#xff0c;应用了最小二乘法线性拟合和2次曲线拟合算法&#xff0c;现总结如下&#xff1a; 最小二乘法线性拟合应用已有的采样时间点&#xff0c;再现这些点所描述的线性变化&#xff0c;即求出一个线性方程yaxb(这个算法的主要问题也就是如何用给定的数据…

数值分析实验四 最小二乘法曲线拟合

一、实验目的 1.使用不同的模型对数据进行最小二乘拟合&#xff1b; 2.分析使用不同模型最小二乘法对数据进行拟合的RMSE(均方根误差)&#xff1b; 3.根据分析结果求出最合理的拟合模型。 二、实验题目 1.用表1-1中的世界人口统计数值估计1980年的人口&#xff0c;求最佳最小…

最小二乘法的拟合原理

一. 最小二乘法的拟合原理 根据《数学指南》书中的解释: 图2 《数学指南》中对最小二乘法的解释 上面这段话&#xff0c;枯燥且无趣&#xff0c;大家不用厌恶&#xff0c;数学向来这个样子。 现在&#xff0c;我们来慢慢认识上面这段话的意思&#xff0c;这句话的意思是说&a…

最小二乘法拟合直线

曲线拟合中最基本和最常用的是直线拟合。设x和y之间的函数关系为&#xff1a; y&#xff1d;abx 式中有两个待定参数&#xff0c;a代表截距&#xff0c;b代表斜率。对于等精度测量所得到的N组数据&#xff08;xi&#xff0c;yi&#xff09;&#xff0c;i&#xff1d;1&#xff…

多项式函数曲线拟合——最小二乘法

多项式函数拟合的任务是假设给定数据由M次多项式函数生成&#xff0c;选择最有可能产生这些数据的M次多项式函数&#xff0c;即在M次多项式函数中选择一个对已知数据以及未知数据都有很好预测能力的函数。 最小二乘法&#xff08;又称最小平方法&#xff09;是一种数学优化技术…

最小二乘法入门(Matlab直线和曲线拟合)

参考博客&#xff1a;https://blog.csdn.net/wokaowokaowokao12345/article/details/72850143 多的就不多说了&#xff0c;持续脱发中&#xff01;&#xff01;&#xff01; 最小二乘法历史起源之类的&#xff1a;https://baike.baidu.com/item/%E6%9C%80%E5%B0%8F%E4%BA%8C%…