【笔试记录】腾讯音乐 | 20230903 | cpp (更新ing)

news/2024/7/8 11:33:39 标签: 数据结构, 算法, 腾讯音乐, 腾讯, 笔试, c++

1 完美数

1.1 题目描述

小红定义一个数为“完美数”,当且仅当该数仅有一个非零数字。例如 5000, 4, 1, 10, 200 都是完美数。 

小红拿到了一个大小为 n(2 <= n <= 2000)的数组 a,她希望选择数组中的两个元素(1 <= a[i] <= 10^9),满足它们的乘积为完美数。 小红想知道,共有多少种不同的取法?

输入描述:

第一行输入一个整数 n,表示数组大小。 

第二行输入 n 个整数,整数之间用空格隔开,表示数组中的元素。

输出描述:

输出一个整数,表示取法个数。

输入示例:

4
25 2 1 16

输出示例:

3

提示信息:

25 * 2 = 50; 2 * 1 = 2; 25 * 16 = 400。

1.2 问题分析

问题出口在于:如何判断数字是不是完美数

我一开始的想法是:每次看数字的最后一位,如果它是0,就去除;如果不是0,就判断剩下的数字是否小于10,如果小于10(也就是说只剩一个非0数字)则是完美数,如果大于10,则不是完美数。

#include <iostream>
#include <vector>
using namespace std;

bool perfect_num(int num){
    while(num % 10 == 0){   // 如果num能被10整除则循环
        num = num / 10;   // num去除一个0,继续循环
    }
    if(num < 10) return true;
    else return false;
}

int main(){
    int n;  // 数组的大小
    cin >> n;
    vector<int> a(n, 0);
    for(int i = 0; i < n; i++){
        cin >> a[i];
    }
    
    int result = 0;
    for(int i = 0; i < n; i++){
        for(int j = i+1; j < n; j++){
            if(perfect_num(a[i] * a[j])){
                result++;
            } 
        }
    }
    cout << result << endl;
    return 0;
}

但是代码有一个致命错误:INT整数相乘会溢出!!!

例如在下面这个测试用例中,我第一个数和第二个数的乘积应该是3467832415636345,但是我程序中计算出来的是-1488565383。显然和预期结果不一样。

所以一定要把int改成long long!下面的代码就对了。

#include <iostream>
#include <vector>
using namespace std;

bool perfect_num(long long num1, long long num2){
    long long num = num1 * num2;
    while(num % 10 == 0){   // 如果num能被10整除则循环
        num = num / 10;   // num去除一个0,继续循环
    }
    if(num < 10) return true;
    else return false;
}

int main(){
    int n;  // 数组的大小
    cin >> n;
    vector<int> a(n, 0);
    for(int i = 0; i < n; i++){
        cin >> a[i];
    }
    
    int result = 0;
    for(int i = 0; i < n; i++){
        for(int j = i+1; j < n; j++){
            if(perfect_num(a[i], a[j])){
                result++;
            } 
        }
    }
    cout << result << endl;
    return 0;
}

2 可爱串

2.1 题目描述

我们定义子序列为字符串中可以不连续的一段,而子串则必须连续。例如 rderd 包含子序列 "red”,且不包含子串"red”,因此该字符串为可爱串。 

小红想知道,长度为 n(3 <= n <= 10 ^ 5)的、仅由 'r''e''d' 三种字母组成的字符串中,有多少是可爱串? 答案请对 10 ^ 9 + 7 取模。

输入描述:

输入共一行,包含一个正整数 n

输出描述:

输出一个正整数,代表可爱串的数量

输入示例:

4

输出示例:

3

提示信息:

"reed"、"rerd"、"rded"

2.2 问题分析

好二叉树

题目描述

小红定义一个二叉树为“好二叉树”,当且仅当该二叉树所有节点的孩子数量为偶数(0 或者 2)。 

小红想知道,n(1<= n <=3000)个节点组成的好二叉树,共有多少种不同的形态? 

答案请对 10 ^ 9 + 7 取模。

输入描述

输入一个正整数 n

输出描述

输出一个正整数,代表好二叉树的数量

输入示例

5

输出示例

2

http://www.niftyadmin.cn/n/5537120.html

相关文章

基于IIS的Windows系统Django项目本地部署

参考&#xff1a; 1. 基于Windows平台的Django本地部署和腾讯云服务器上部署&#xff08;1&#xff09;_如何在服务器上发布部署django程序 csdn-CSDN博客 2.Windows server iis部署Django详细操作 - Django中文 - 博客园 (cnblogs.com) 3.在IIS中部署pythonDjango项目时出…

单片机软件架构连载(2)-指针

我工作了10年&#xff0c;大大小小做过几十个项目&#xff0c;用指针解决过很多实际产品的痛点&#xff0c;比如写过小系统&#xff0c;数据结构(队列&#xff0c;链表)&#xff0c;模块化编程等等..... 今天贴近实际&#xff0c;给大家总结了c语言指针常用的知识点&#xff0c…

浅析MySQL-索引篇01

什么是索引&#xff1f; 索引是帮助存储引擎快速获取数据的一种数据结构&#xff0c;类似于数据的目录。 索引的分类 按数据结构分类&#xff1a; MySQL 常见索引有 BTree 索引、HASH 索引、Full-Text 索引。 Innodb是MySQL5.5之后的默认存储引擎&#xff0c;BTree索引类型也…

如何在Qt使用uchardet库

如何在 Qt 中使用 uchardet 库 文章目录 如何在 Qt 中使用 uchardet 库一、简介二、uchardet库的下载三、在Qt中直接调用四、编译成库文件后调用4.1 编译工具下载4.2 uchardet源码编译4.3 测试编译文件4.4 Qt中使用 五、一些小问题5.1 测试文件存在的问题5.2 uchardet库相关 六…

【MySQL】MySQL 9.0悄悄的来了

MySQL 9.0.0 中的变化 MySQL 9.0 中的新功能 JavaScript 存储程序 MySQL 企业版现在支持用 JavaScript 编写的存储程序&#xff0c;例如使用 CREATE FUNCTION下面显示的语句和 JavaScript 代码创建的这个简单示例&#xff1a; CREATE FUNCTION gcd(a INT, b INT) RETURNS …

Redis基础教程(十四):Redis连接

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…

LangChain4j系列:带你入门LangChain4j框架

本文所有示例均在 langchain4j 0.31.0 版本之上进行&#xff0c;langchain4j也是在快速发展的阶段。 LangChain4j 框架是什么&#xff1f; LangChain4j 于 2023 年初在 ChatGPT 的炒作中开始开发。思想来源于 Python 和 JavaScript LLM 库&#xff0c;并加入创新思想&#xff…

云原生之使用Docker部署RabbitMQ消息中间件

云原生之使用Docker部署RabbitMQ消息中间件 一、RabbitMQ介绍1.1 RabbitMQ简介1.2 RabbitMQ特点1.3 RabbitMQ使用场景 二、检查Docker环境2.1 检查Docker版本2.2 检查操作系统版本2.3 检查Docker状态 三、下载RabbitMQ镜像四、部署RabbitMQ服务4.1创建挂载目录4.2 运行RabbitMQ…