当前位置: 首页 > news >正文

美团8-30:编程题

美团8-30:编程题

  • 题目1
  • 思路
  • 代码
  • 题目2
  • 思路
  • 代码

题目1

小美有一个数字 n,小美打算按照以下规则对 n 进行操作:
· 如果n是偶数,让n除以2;
· 否则,让 n 乘以 3 再加 1。
小美想知道,在操作k次后,n 会变成多少。

思路

这道题的思路首先肯定是进行模拟即我们使用一个循环来对n进行一步一步的操作,这种方法理论是可行的但是题目是有时间要求的。所以只要k变得很大就肯定会超时,所以这种方法没法完全ac。那么我们就要思考有没有其他的情况可以简化循环了,光想肯定是没法得到答案的我们试着给前面十个数字的转换过程写一下,首先是1,它是奇数所以会变成4,然后4是偶数又变成2,2是偶数又变成1。这不是变成一个循环了吗即1241…的循环,那么只要n变成了1我们就只需要让剩下的操作次数取余一个3,这样得到的数字不就分别对应着1,2,4吗。

代码

#include <iostream>
using namespace std;int main()
{int n,k;cin >> n >> k;if(k == 0){cout << n << endl;}//最后n会陷入1 2 4 1的循环所以我们先看n会不会变成1while(k > 0 && n != 1){if(n % 2 == 0){n /= 2;}else{n *= 3 + 1;}k--;}if(k == 0){cout << n << endl;}else{k %= 3;if(k == 0){cout << 1 << endl;}else if( k == 1){cout << 2 << endl;}else if( k == 2){cout << 4 << endl;}}return 0;
}

题目2

小美是一位数学爱好者,她想知道给定的有理数在 k 进制下是否为一个 有限小数。换句话说,她希望判断在基数为k的表示中,该分数的小数部分是否会在有限位后结束,而不是无限循环。
例如,-1/2 在十进制下表示为 0.5,是有限小数;相比之下,1/3在十进制下表示为 0.3333…,不是有限小数。

思路

看了题目之后我们必须要知道的一点就是如何判断一个分数在k进制下是有限小数,这涉及到数学知识了。答案是:一个分数在k进制下想要是有限小数那么它的最简分母的质因子必须全部包含在k的质因子里,也就是说最简分母的质因子和k的质因子是一个包含关系,k的质因子包含最简分母的质因子。
那么质因子是什么呢?官方定义是质因子(质因数)是指能整除给定正整数的质数。例如,12 的质因子是 2 和 3,因为 12 = 2 × 2 × 3。
那么我们在得到一个分数后首先要做的就是进行化简,想要化简就必须找到分子分母的最大公约数而寻找最大公约数的办法有很多我们使用最简单的辗转相除法。在得到最简分母后我们就需要寻找分母和k的公共质因子,同样我们也可以使用寻找分母和k的最大公约数的办法,在得到质因子后我们让分母除以质因子,然后再次寻找与k的质因子再除以质因子。以此循环直到质因子为1就代表分母和k的所有的质因子都找到了,这时候如果分母为1就代表这个分母的质因子是包含在k里面的,如果不为1说明这个分母还有其他的质因子。

代码

#include<iostream>
using namespace std;long long gcd(long long p, long long q)
{//辗转相除法while (p != 0){long long tmp = q % p;q = p;p = tmp;}return q;
}bool checkcycle(long long p, long long q, long long k)
{//如果最简分母的质因子包含在k的质因子里就说明这个分数是有限小数//求分子分母的最大公约数从而得到最简分母long long sq = gcd(p, q);q = q / sq;//如果最简分母为1则返回trueif (q == 1){return true;}//求得q和k的质因子也就是最大公约数long long d = gcd(q, k);while (d != 1){q /= d;d = gcd(q, k);}if (q == 1){return true;}else{return false;}
}int main()
{int t;cin >> t;while (t--){long long p, q, k;cin >> p >> q >> k;if (p == 0){cout << "yes" << endl;}bool res = checkcycle(p, q, k);if (res == true)cout << "yes" << endl;elsecout << "no" << endl;}return 0;
}
http://www.xdnf.cn/news/1396927.html

相关文章:

  • Java Stream API并行流性能优化实践指南
  • 在线简历生成工具,免费好用
  • FOC开环控制代码解读
  • git在push和clone等操作时显示‘: Invalid argument
  • 50.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--新增功能--二期功能规划
  • 使用VBA嵌套字典快速统计生产流转信息
  • Pregel 与 LangGraph:从分布式图计算到现代 AI 智能体的架构演进与 API 深度解析
  • 设计模式:抽象工厂模式(Abstract Factory Pattern)
  • 华为 HarmonyOS 代表未来
  • JS之刷刷
  • Redis-数据类型的常用操作命令
  • 将LLM模型“钉”在电路板上:用电阻矩阵实现物理推理引擎
  • 【ASP.NET Core】双Token机制在ASP.NET Core中的实现
  • DETR:用Transformer革新目标检测的新范式
  • 基于物联网设计的园林灌溉系统(华为云IOT)_274
  • 从单机到分布式:Python 爬虫架构演进
  • 嵌入式Linux学习 - 数据库开发
  • 系统集成项目管理工程师第十二章:执行过程组全解析
  • 操作系统上的Docker安装指南:解锁容器化新世界
  • 进制转换问题
  • Tomcat 企业级运维实战系列(五):Tomcat 优化和安全加固
  • 简易TCP网络程序
  • 250830-Docker从Rootless到Rootful的Gitlab镜像迁移
  • 【Linux】网络安全管理:Netfilter、nftables 与 Firewalld | Redhat
  • Pmp项目管理方法介绍|权威详解与实战指南
  • 【超全汇总】MySQL服务启动命令手册(Linux+Windows+macOS)(上)
  • MYSQL速通(3/5)
  • Linux 830 shell:expect,ss -ant ,while IFS=read -r line,
  • 构建AI智能体:十八、解密LangChain中的RAG架构:让AI模型突破局限学会“翻书”答题
  • Python自定义函数形式参中的*args、**kwargs、*和/