当前位置: 首页 > 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.dtcms.com/a/358324.html

相关文章:

  • 深入解析前缀和算法:原理、实现与应用
  • 医疗AI时代的生物医学Go编程:高性能计算与精准医疗的案例分析(六)
  • react组件
  • C++优先级队列priority_queue的模拟实现
  • Trailing Zeros (计算 1 ~ n 中质因子 p 的数量)
  • Java全栈开发面试实战:从基础到高并发的全面解析
  • Redis数据类型概览:除了五大基础类型还有哪些?
  • leetcode643. 子数组最大平均数 I
  • AI-调查研究-65-机器人 机械臂控制技术的前世今生:从PLC到MPC
  • vscode+cmake+mingw64+opencv环境配置
  • wpf之依赖属性
  • 具有类人先验知识的 Affordance-觉察机器人灵巧抓取
  • C++_多态和虚构
  • 卡片一放,服务直达!实现信息零层级触达
  • Python实现京东商品数据自动化采集的实用指南
  • (双指针)Leetcode283.移动零-替换数字类别+Leetcode15. 三数之和
  • UI前端大数据可视化实战策略:如何设计符合用户认知的数据可视化界面?
  • 【计算机网络】HTTP是什么?
  • Ansible Playbook 调试与预演指南:从语法检查到连通性排查
  • 一体化步进伺服电机在汽车线束焊接设备中的应用案例
  • MongoDB 源码编译与调试:深入理解存储引擎设计 内容详细
  • HarmonyOS元服务开发
  • 深入解析HarmonyOS:UIAbility与Page的生命周期协同
  • TensorFlow 面试题及详细答案 120道(71-80)-- 性能优化与调试
  • 坚鹏请教DEEPSEEK:请问中国领先的AI智能体服务商有哪些?知行学
  • 深度学习系列 | Seq2Seq端到端翻译模型
  • 离线大文件与断点续传:ABP + TUS + MinIO/S3
  • IAR工程如何搭建vscode+clangd编辑环境
  • 如何使用快照将 AWS OpenSearch 服务中的数据从开发环境复制到生产环境
  • 互联网医院系统优势介绍