您现在的位置是:首页 >学无止境 >每日练题---C语言网站首页学无止境
每日练题---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.只读到
才停止
scanf("%[^
]s", arr);
int len = strlen(arr);
reverse(arr, arr + len - 1);
//逆序单词
char* cur = arr;
char* start = arr;
while (*cur)
{
//找单词
while (*cur != ' ' && *cur != '