每日练题---C语言

简介: 每日练题---C语言

前言:


 今日份题目有:求两个整数的最小公倍数,求倒置字符串,。


一.求最小公倍数

 牛客网链接:OJ链接


 百度词条:



 例如:15能被1、3、5、15这些数整除,所以15这些整数的倍数。公倍数是两个整数或更多整数公有的倍数,求最小的那一个就是最小公倍数。[a,b]表示a和b的最小公倍数。没有最大公倍数,因为它可以无限大。


1.1公式法

 公式:最大公约数 * 最小公倍数 = a * b



1.2遍历法

 遍历法:最小公倍数至少也要大于等于两数的较大值。例如:4和6的最小公倍数是12;1和7的最小公倍数是7;



 这种算法逻辑上可行的,但算法本身太差了,在OJ这种有时间限制的平台上是不能完全通过测验用例的。


做OJ题需要考虑时间效率;代码只有经过多组多样的测试无误后,才能算正确;


1.3乘除法

 乘法:两个数的最小公倍数一定能被两个数整除,并且得到的商是另一个整数。例如:5和7的最小公倍数是35。35被5整除商7,35被7整除商5。那么a * i / b == 0,就意味着a*i是a和b的最小公倍数。



二.倒置字符串

 牛客网链接:OJ链接



 解题思路:逆序整个字符串,再把每个单词逆序。



#include <stdio.h>
#include <string.h>
void reverse(char* left, char* right)
{
    while (left < right)
    {
        char tmp = *left;
        *left = *right;
        *right = tmp;
        left++;
        right--;
    }
}
int main()
{
    //包括斜杠0,开辟大小为101个字符的数组
    char arr[101] = { 0 };
    //1.只读到\n才停止
    scanf("%[^\n]s", arr);
    int len = strlen(arr);
    reverse(arr, arr + len - 1);
    //逆序单词
    char* cur = arr;
    char* start = arr;
    while (*cur)
    {
        //找单词
        while (*cur != ' ' && *cur != '\0')
        {
            cur++;
        }
        reverse(start, cur - 1);
        start = cur + 1;
        if (*cur == ' ')
            cur++;
    }
    printf("%s", arr);
    return 0;
}

 读取包括空格的字符串,单纯使用scanf是完成不了的,因为空白是scanf结束读取的一个标志。这里的使用的方式是[^\n],它的意思是,让scanf读取到'\n'才停止读取。


 读取带有空格的字符串到数组中的方式有:

scanf("%[^\n]s", arr);
gets(arr);
fgets(arr, 100, stdin);
while(arr[i++] = getchar() != '\n');

 gets在编译器看来是不安全的,因为没有限制读取的个数,可以使用的地方就使用,不可以就用fgets,这个函数限制了读取字符的个数100,从标准输入流stdin里读取到arr数组里。


 训言:


 保证理解的前提下,保证质量的前提下,多刷题,最后总结!!!!

相关文章
|
7月前
|
C语言
C语言---指针进阶
C语言---指针进阶
53 0
|
Java 编译器 程序员
初识C语言 -- 01
初识C语言 -- 01
150 0
|
6月前
|
C语言
C语言的灵魂---指针(进阶)
C语言的灵魂---指针(进阶)
|
6月前
|
C语言
|
6月前
|
存储 C语言
|
存储 Java C语言
初识C语言 --- 02
初识C语言 --- 02
33 0
|
算法 C语言
c语言学习第九课---函数2
c语言学习第九课---函数2
60 0
|
C语言
结构体 --- C语言
结构体 --- C语言
|
存储 编译器 C语言
指针 --- C语言
指针 --- C语言
|
算法 编译器 C语言
从零学习C语言---函数
本章介绍了C语言中函数的使用,函数是C语言中非常要要的一部分。快来学习把。
从零学习C语言---函数

热门文章

最新文章