天翼云笔试 天翼云秋招 0915
笔试时间:2025年9月15日
往年笔试合集:
第一题
Tk和他的弟弟买了n种不同的零食(编号从1开始),每种零食各一个。给定整数k以及价格表,其中编号为i的零食价格为k^(i-1)。需要把全部零食在两人之间分配,满足:
- Tk(哥哥)的零食总价格不超过弟弟的总价格
- 在满足条件1下,两人的总价格差尽可能小
输入描述
输出描述
样例输入
2
1 2
5 1
样例输出
0
2
1 2
样例说明:
- 当n=1,k=2时,价格为2。若Tk拿走将违反不超过条件,因此m=0
- 当n=5,k=1时,价格全为1,选取编号1,2得到2的价格,弟弟得到剩余3的价格
参考题解
解题思路:
- 当k=1时,所有零食价格均为1,Tk应拿⌊n/2⌋个零食
- 当k>1时,价格构成等比数列,最大的零食价格大于其他所有零食价格之和,因此Tk拿前n-1个零食,弟弟拿最大的
C++:
#include <iostream>
using namespace std;
void solve() {
long long n, k;
cin >> n >> k;
long long m;
if (k == 1) {
m = n / 2;
} else {
m = n - 1;
}
cout << m << endl;
if (m > 0) {
for (long long i = 1; i <= m; i++) {
if (i > 1) cout << " ";
cout << i;
}
cout << endl;
} else {
cout << endl;
}
}
int main() {
int t;
cin >> t;
while (t--) {
solve();
}
return 0;
}
Java:
import java.util.*;
public class Main {
public static void solve(Scanner sc) {
long n = sc.nextLong();
long k = sc.nextLong();
long m;
if (k == 1) {
m = n / 2;
} else {
m = n - 1;
}
System.out.println(m);
if (m > 0) {
for (long i = 1; i <= m; i++) {
if (i > 1) System.out.print(" ");
System.out.print(i);
}
System.out.println();
} else {
System.out.println();
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int t = sc.nextInt();
while (t-- > 0) {
solve(sc);
}
sc.close();
}
}
Python:
import sys
def f():
a, b = map(int, sys.stdin.readline().split())
if b == 1:
c = a // 2
else:
c = a - 1
print(c)
if c > 0:
print(*list(range(1, c + 1)))
else:
print()
def main():
t = int(sys.stdin.readline())
for _ in range(t):
f()
if __name__ == "__main__":
main()
第二题
小红得到了一个长为n的数组a,判断是否对于所有
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
2025 春招笔试合集 文章被收录于专栏
2025打怪升级记录,大厂笔试合集 C++, Java, Python等多种语言做法集合指南
查看23道真题和解析