#C语言——刷题攻略:牛客编程入门训练(六):运算(三)-- 涉及 辗转相除法求最大公约数

🌟菜鸟主页:@晨非辰的主页

👀学习专栏:《C语言刷题合集》

💪学习阶段:C语言方向初学者

名言欣赏:"代码行数决定你的下限,算法思维决定你的上限。"


目录

[1. 牛牛的球](#1. 牛牛的球)

[2. 小乐乐排电梯](#2. 小乐乐排电梯)

[3. 小乐乐与欧几里得(辗转相除法求gcd--欧几里得算法)](#3. 小乐乐与欧几里得(辗转相除法求gcd--欧几里得算法))

[4. 小乐乐改数字](#4. 小乐乐改数字)

[5. KiKi算期末成绩](#5. KiKi算期末成绩)

[6. BC47 (a+b-c)*d的计算问题](#6. BC47 (a+b-c)*d的计算问题)


前言:在学习编程语言的同时,千万别忘了刷刷题来巩固一下学到的知识,对于牛客网_编程入门系列,小子会持续更新分享刷题过程,其中包括一些基础板块的题目,本次将呈现的运算章节,共6道题。有几道题需要一点思考,大家开开胃~~

~~注意部分标题括号内代表对题目涉及到的知识进行说明!

1. 牛牛的球

题目链接:牛客网_BC41 牛牛的球_中等

cpp 复制代码
int main()
{
	int r = 0;//定义半径变量
	scanf("%d", &r);//键盘输入
	//公式计算体积
	float v = (4.0 / 3) * (3.14 * r * r * r);
	printf("%.2f\n", v);
	return 0;
}

解题思路:

--本题唯一要注意的点的是进行除法运算时,想要输出浮点数,就要保证至少一个操作数为浮点型。


2. 小乐乐排电梯

题目链接:牛客网_BC43 小乐乐排电梯_简单

cpp 复制代码
int main()
{
	int num_of_people = 0;
	int minutes = 0;
	scanf("%d", &num_of_people);
	if (num_of_people < 11)
	{
		minutes = 2;
		printf("%d\n", minutes);
	}
	else
	{
		minutes = (num_of_people / 12) * 4 + 2;
		printf("%d", minutes);
	}
	return 0;
}

解题思路:

--本题关键主要是分清楚人数走几回上下,分两种情况:一种是加上乐乐<=12,直接上;另一种:前面走几趟*4分钟,加上乐乐上的2分钟;图解如下:


3. 小乐乐与欧几里得(辗转相除法求gcd--欧几里得算法

题目链接:牛客网_BC44小乐乐与欧几里得_简单

--一般思路:但是这样运行效率较低

cpp 复制代码
int main()
{
	long n = 0;
	long m = 0;
	scanf("%ld%ld", &n, &m);
	//求gcd
	long gcd = 0;
	long i = 0;
	
	//判断min
	long min = n < m ? n : m;
	for (i = min; i >= 1; i--)
	{
		if (n % i == 0 && m % i == 0)
		{
			gcd = i;
			break;
		}
	}

	//求lcm,因为 gcd * lcm = n * m
	long lcm = n * m / gcd;
	//求和
	long sum = gcd + lcm;
	printf("%ld\n", sum);
	return 0;
}

--辗转相除法(欧几里得算法)

cpp 复制代码
int main()
{
	long int n = 0;
	long int m = 0;
	long gcd = 0;
	while (scanf("%ld %ld", &n, &m) == 2)
	{
		//保留原始值
		long i = n;
		long j = m;

		//辗转相除法
		while (m != 0)
		{
			long tem = m;
			m = n % m;
			n = tem;
		}
			gcd = n;

		//求lcm,因为 gcd * lcm = n * m
		long lcm = i * j / gcd;
		//求和
		long sum = gcd + lcm;
		printf("%ld\n", sum);
	}
	return 0;
}

解题思路------

--对于辗转相除法的好处就是,显著提升了代码运行效率,还有就是不用考虑输入数值的大小顺序,因为对于 b = a % b(如果a<b,就会将a赋值给b,后续操作将b赋值给a)就完成了大小数值的转换。


4. 小乐乐改数字

题目链接:牛客网_BC45 小乐乐改数字_中等

cpp 复制代码
int main()
{
	int num = 0;
	int last_num;
	int position = 1;//从个位开始
	int new_num = 0;
	int result = 0;
	scanf("%d", &num);
	while (num)
	{
		//拿出最后一位数字
		last_num = num % 10;
		num /= 10;//消位

		//判断要求
		new_num = (last_num % 2 == 0) ? 0 : 1;

		//构建新数字
		result = new_num * position + result;
		position *= 10;//初始为1,每次*10进位
	}
	printf("%d\n", result);
	return 0;
}

解题思路------

--本题主要就是将数值进行取余获得最低位数字进行判断,但是判断不再使用一般思路的条件语句,改换成条件表达式更加简便、效率高;

--对于判断后的数字重组,就可以将最低位数字乘上相应位数的数值,比如:各位*1、十位*10......,再进行相加即可得到。


5. KiKi算期末成绩

题目链接:牛客网_BC 46KiKi算期末成绩_简单

cpp 复制代码
int main() 
{
   int a = 0;
   int b = 0;
   int c = 0;
   int d = 0;
   scanf("%d%d%d%d", &a, &b, &c, &d);
   float sum_score = a * 0.2 + b * 0.1 + c * 0.2 + d * 0.5;
   printf("%.1f\n", sum_score);
    return 0;
}

解题思路------

--本题思路简单,只需注意成绩相对百分占比,小子嘴遁~


6. BC47 (a+b-c)*d的计算问题

题目链接:牛客网_BC47 (a+b-c)*d的计算问题-入门

cpp 复制代码
int main() 
{
    int a = 0;
    int b = 0;
    int c = 0;
    int d = 0;
    scanf("%d%d%d%d", &a, &b, &c, &d);
    int result = (a + b - c) * d;
    printf("%d\n", result);
    return 0;
}

解题思路------

--小子还是那句话:这是一个非常简单的题目,意在考察你编程的基础能力。千万别想难了哦。嘴遁~~


相关刷题系列回顾 :

#C语言------刷题攻略:牛客编程入门训练(四):运算(一)

#C语言------刷题攻略:牛客编程入门训练(五):运算(二)-- 涉及 海伦公式、sqrt函数求三角形面积

结语:本篇文章就到此结束了,本文主要是练习有关运算的题目,后续的题目练习难度会慢慢上来,但总体来说不会太难,喜欢的朋友们,一起来学习吧!欢迎三连~

相关推荐
mysla16 分钟前
嵌入式学习day40-硬件(1)
学习
BYSJMG18 分钟前
计算机毕设推荐:基于python的农产品价格数据分析与预测的可视化系统的设计与实现 基于Python农产品管理系统【源码+文档+调试】
大数据·开发语言·hadoop·python·数据分析·django·课程设计
火山kim25 分钟前
一文速通C#(网页资源版)
开发语言·c#
三天不学习26 分钟前
从零开始学习C#上位机开发学习进阶路线,窥探工业自动化和物联网应用
学习·c#·自动化
冬天vs不冷33 分钟前
Java基础(十):关键字static详解
java·开发语言
lingchen19061 小时前
MATLAB矩阵及其运算(四)矩阵的运算及操作
开发语言·matlab·矩阵
程序员小范1 小时前
TIOBE 8月编程语言榜深度解析:Python占比突破26%,Perl成最大黑马
开发语言·python·perl
是三好1 小时前
单例模式(Singleton Pattern)
java·开发语言·算法·单例模式
武子康1 小时前
AI-调查研究-67-具身智能 核心技术构成全解析:感知、决策、学习与交互的闭环系统
人工智能·科技·学习·程序人生·ai·职场和发展·职场发展
王伯安呢1 小时前
Python 环境配置初学者指南:从安装到 Pycharm 项目配置
开发语言·python·pycharm·环境配置·初学者