C语言_练习题

求最小公倍数

思路:假设两个数,5和7,那么最小至少也要7吧,所以先假定最小公倍数是两个数之间较大的,然后看7能不能同时整除5和7,不能就加1继续除

cpp 复制代码
int GetLCM(int _num1, int _num2)
{
	int max = _num1>_num2 ? _num1 : _num2;
	while (1)
	{
		//证明能同时整除
		if (!(max%_num1) && !(max%_num2)) return max;
		else max++;
	}
}

int main()
{
	//输入两个正整数
	int num1, num2;
	scanf("%d %d", &num1, &num2);
	printf("%d\n", GetLCM(num1, num2));
	return 0;
}

上面的方法效率太低需要优化

思路:a*i % b 看看能不能整除,能就a*i是最小公倍数,不能就i++

cpp 复制代码
int main()
{
	//输入两个数
	int a, b;
	scanf("%d %d", &a, &b);
	//判断
	int i = 1;
	while (a*i % b) i++;
	printf("%d\n", a*i);
	return 0;
}

倒置字符串

思路:1. scanf这个函数它读到空格它就不读了,所以我们要这样写scanf("%\^\\ns"),它的意思是往后读一直读到\n。

  1. 先把整个字符串倒置,再将每个单词倒置
cpp 复制代码
void reverse(char* start, char* end)
{
    char tmp;
    while (start < end)
    {
        tmp = *start;
        *start = *end;
        *end = tmp;
        start++;
        end--;
    }
}

int main() {
    char arr[100];
    scanf("%[^\n]s", arr);

    int len = strlen(arr);
    char* start = arr;
    char* end = start + (len - 1);
    reverse(start, end); //倒置整个数组

    start = arr;
    end = arr;
    while (*end++)
    {
        
        while (*end != ' ' && *end != '\0')
        {
            end++;
        }
        reverse(start, end - 1);
        start = end + 1;
    }

    printf("%s\n", arr);
    return 0;
}











解析:3和2都是整数,所以3/2等于1






相关推荐
sunshine22 girl8 小时前
Java学习六 Java常见API-1-Radom随机数
java·开发语言·学习
可乐鸡翅yeah_9 小时前
hls.js 手动自定义 http 请求 loader,修改请求头实战
开发语言·前端·javascript·网络协议·http·ecmascript·m3u8在线
IT_陈寒9 小时前
Vite静态资源导入这个坑我帮你们踩过了
前端·人工智能·后端
潼心1412o9 小时前
C++初阶(长期更新)第6讲:类和对象(下)
开发语言·c++·算法
星光开发者9 小时前
基于决策树随机森林算法的小说推荐系统的设计与实现-计算机毕设【课程设计】78485
vue.js·算法·微信小程序·django·php·课程设计·express
夜晚回家9 小时前
Python 零基础入门 | 输入的数字为什么不能直接算
开发语言·python
时间的拾荒人9 小时前
Qt 事件机制全解析:从事件处理到事件过滤器
开发语言·qt·面试
-森屿安年-9 小时前
按身高排序
c++·算法
于指尖飞舞9 小时前
java面试题总结
java·开发语言
打工仔折腾 AI9 小时前
把AI Agent托管在家用电脑:UU远程终端与端口映射实测记录
人工智能·后端·python·langchain·ai agent 实战