笔试笔试2025 360春季笔试真题
玦尘本文为原创内容,转载请注明出处并附带原文链接。感谢您的尊重与支持!
1.序列翻转
题目描述
给定一个长度为n的二进制数字,你可以选择一个区间[x,y]进行翻转。你的目标是得到一个尽量小的二进制数字。
例如下面这个例子中:对于数字11001,你可以选择第一个到第四个位置进行翻转,将11001变成00111。可以证明,这是翻转后可以得到的最小数字。
至多进行一次翻转,请你找到最小的二进制数字并输出。
输入描述
第一行一个整数n,描述这个二进制数字的长度。
第二行一个长度为n的二进制数字。1 ≤ n ≤ 500
输出描述
一个在题目限制下可以得到的长度为n的最小二进制数字。
输入
5
11001
输出
00111
参考答案:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| import java.util.Scanner;
public class MinLexStringAfterReverse { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); sc.nextLine(); String t = sc.nextLine();
int first0 = -1;
for (int i = 0; i < n; i++) { if (t.charAt(i) == '1') { first0 = i; break; } }
if (first0 == -1) { System.out.println(t); return; }
String res = t;
for (int i = first0 + 1; i < n; i++) { StringBuilder sb = new StringBuilder(); sb.append(t, 0, first0); sb.append(new StringBuilder(t.substring(first0, i + 1)).reverse()); sb.append(t.substring(i + 1));
if (sb.toString().compareTo(res) < 0) { res = sb.toString(); } }
System.out.println(res); } }
|
2.修复方程
题目描述
给出一些仅包含正整数,加号,乘号和等号的方程,请判断这些方程能否通过插入至多一个数位(若原方程成立则可以不插)使得方程成立。
插入一个数位即将方程视为一个字符里,并将一个0到9之间的数插入中间,开头或未尾。
输入描述
第一行有一个正整数T(1<=T<=10),代表方程的数是。
接下来T行,每行均有一个仅包含十进制正整数,加号和乘号的方程。每个方程中均只会包含一个等号。
保证输入的方程合法,即每个数均不含前导要,开头和未尾没有运算符,且没有两个相邻的运算符。
输入中方程两边计算结果的最大值不超过1000000000,且每个方程的长度不超过1000。
输出描述
对于每个方程,若其成立或可以通过往该方程中插入一个数位使得方程成立,则输出Yes,否则输出No。
输入

输出
Yes
Yes
No
Yes
Yes
No
参考答案:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
| import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern;
public class ExpressionFixer {
public static String init(String s) { s = s.replaceAll(" ", ""); s = s.replaceAll("=", "=="); Pattern p = Pattern.compile("\\b0+(\\d+)\\b"); Matcher m = p.matcher(s); StringBuffer sb = new StringBuffer(); while (m.find()) { m.appendReplacement(sb, m.group(1)); } m.appendTail(sb); return sb.toString(); }
public static boolean judgeIgnoreError(String s) { try { javax.script.ScriptEngineManager mgr = new javax.script.ScriptEngineManager(); javax.script.ScriptEngine engine = mgr.getEngineByName("JavaScript"); Object result = engine.eval(s); if (result instanceof Boolean && (Boolean) result) { return true; } } catch (Exception e) { } return false; }
public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = Integer.parseInt(scanner.nextLine().trim());
for (int t = 0; t < n; t++) { String raw = scanner.nextLine().trim(); String s = init(raw); boolean can = judgeIgnoreError(s); if (!can) { for (int i = 0; i <= s.length(); i++) { if (can) break; for (char c = '0'; c <= '9'; c++) { String modified = s.substring(0, i) + c + s.substring(i); if (judgeIgnoreError(modified)) { can = true; break; } } } } System.out.println(can ? "Yes" : "No"); } scanner.close(); } }
|