腾讯云智笔试 腾讯云智笔试题 0405
笔试时间:2025年04月05日
历史笔试传送门:
第一题
题目:
牛牛开了一家水果店,已知,一个水果恰好可切成 n 块(不论大小),也只能切成 n 块。一个顾客,他 / 她买一盒水果,要求是:这盒水果中的水果块数必须在闭区间 [l, r] 中。牛牛只按 “个” 卖水果,而不是按 “块” 卖水果,所以,如果整数个水果并不满足顾客要求,牛牛就不会卖给这位顾客;而如果存在整数个水果,使得这些水果切成的块数满足顾客要求,那么,牛牛希望你告诉他,牛牛最少需要切多少个水果,以及最多需要切多少个水果。
输入描述
本题为多组测试数据,第一行输入一个正整数 T (1 ≤ T ≤ 1000),代表测试数据的组数。
对于每组测试数据,一行输入三个正整数 n, l, r (1 ≤ n ≤ 100; 1 ≤ l ≤ r ≤ 1000) ,含义如题所述。
输出描述
对于每组测试数据,如果牛牛的卖水果规则不能满足顾客要求,则输出 -1,否则输出两个正整数,依次代表牛牛需要为这位顾客最少切多少个水果,最多切多少个水果。
样例输入
5
2 6 9
3 7 8
1 6 6
9 233 965
10 996 996
样例输出
3 4
-1
6 6
26 107
-1
参考题解
模拟题,需要满足 l ≤ k*n ≤ r 变形为 k ≥ ceil(l/n) 且 k ≤ floor(r/n) 。
C++:[此代码未进行大量数据的测试,仅供参考]
#include <iostream>
using namespace std;
int main() {
int T;
cin >> T;
while (T--) {
int n, l, r;
cin >> n >> l >> r;
int kMin = (l + n - 1) / n; // ceil(l / n)
int kMax = r / n;
if (kMax < 1 || kMin > kMax) {
cout << -1 << endl;
} else {
cout << kMin << " " << kMax << endl;
}
}
return 0;
}
Java:[此代码未进行大量数据的测试,仅供参考]
import java.util.Scanner;
publicclass Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
while (T-- > 0) {
int n = sc.nextInt();
int l = sc.nextInt();
int r = sc.nextInt();
int kMin = (l + n - 1) / n; // 向上取整
int kMax = r / n;
if (kMax < 1 || kMin > kMax) {
System.out.println(-1);
} else {
System.out.println(kMin + " " + kMax);
}
}
}
}
Python:[此代码未进行大量数据的测试,仅供参考]
import math
T = int(input())
for _ in range(T):
n, l, r = map(int, input().split())
kMin = (l + n - 1) // n # Equivalent to ceil(l / n)
kMax = r // n
if kMax < 1 or kMin > kMax:
print(-1)
else:
print(kMin, kMax)
第二题
题目
对于一个只包含英文字母的字符串,你可以更改其中的字符,不同的更改类型,代价如下:将一个字母改为另一个大小写相同的字母,花费为 5。将一个字母由大写改为小写或者由小写改为大写花费为 5。现在请你求出对于任给的一个只包含英文字母的字符串,使其中包含有子串 AcMer 的最小代价是多少
输入描述
在一行中给出一个只包含大小写英文字母的字符串 str ,5 ≤ |str| ≤ 200000 。
输出描述
在一行中输出最小的代价。
样例输入
AcAer
样例输出
5
参考题解
滑动窗口遍历 :遍历所有长度为5的子串(时间复杂度O(n))窗口滑动范围:0 <= i <= s.length()-5
C++:[此代码未进行大量数据的测试,仅供参考]
#include <iostream>
#include <string>
#include <climits>
#include <cctype>
using namespace std;
int calculateCost(char current, char target) {
if (current == target) return 0;
bool currentUpper = isupper(current);
bool targetUpper = isupper(target);
if (currentUpper == targetUpper)
return 5; // same case, different letter
else if (tolower(current) == tolower(target))
return 5; // same letter, different case
else
return 10; // different letter and case
}
int main() {
string s;
getline(cin, s);
const string target = "AcMer";
int minCost = INT_MAX;
for (size_t i = 0; i + 5 <= s.size(); ++i) {
int cost = 0;
for (int j = 0; j < 5; ++j) {
cost += calculateCost(s[i + j], target[j]);
}
minCost = min(minCost, cost);
}
cout << minCost << endl;
return 0;
}
Java:[此代码未进行大量数据的测试,仅供参考]
import java.util.Scanner;
publicclass Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine().trim();
char[] target = {'A', 'c', 'M', 'e', 'r'};
int minCost = Integer.MAX_VALUE;
for (int i = 0; i <= s.length() - 5; i++) {
int cost = 0;
for (int j = 0; j < 5; j++) {
cost += calculateCost(s.charAt(i + j), target[j]);
}
minCost = Math.min(minCost, cost);
}
System.out.println(minCost);
}
private static int calculateCost(char current, char target) {
if (current == target) return0;
boolean currentUpper =
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
2025打怪升级记录,大厂笔试合集 C++, Java, Python等多种语言做法集合指南

查看17道真题和解析