天翼云笔试 天翼云秋招 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等多种语言做法集合指南