以下内容来自于应聘者回忆整理
很多同学都想得到360的实习或者校招机会。那从过来人的角度谈谈,要通过360的实习、校招面试,都有哪些经验和注意事项呢?今天就跟大家分享一下。
1、 为考验各自的数学能力,小 B 和小A 经常在一起玩各种数值游戏,这一次他 们又有了一种新玩法。每人从指定的数值范围中各自选择一个整数,记小 A 选择的数值为 a,小 B 选择的数值为 b。他们用一个均匀分布的随机数发生 器在该数值范围中随机生成一个整数 c,定义制胜的游戏规则为谁选的数离 c 近则谁取得胜利。由于小 B 是女生,特别定义当两人的数与 c 之间的差值相 等时,小 B 获胜。 由于先前的游戏中,小A 为表现绅士风度总是输多赢少,因此他特别渴望这次 能够给小 B 比较深刻的映像,所以向你求助。你事先已经知道了小 B 所选的 数值和指定的数值范围,小A 希望你帮他选择一个数值使得他获胜的概率最 大。
【思路】
输入多行,每行一组数据,包含两个正整数 n 和 b,分别代表数值范围和小 B 所需的数字,其中 1 <= b <= n <= 10^9. 每组输入,单独的行中输出一个数,为小 A 所选的数字,使得小A 获胜的概 率最大,若存在多个这样的数,输出最小的那个。 题目分析 这个题其实不难,但题意半天搞不懂,所以开始试了几次都错误。 显然看出,小 A 不一定赢,因为假设两人都猜对,那也是小 B 获胜。所以其 实本题就是求出在所有情况下,小 A 获胜概率最大的数,更直白的说,小 A 猜数结果从 1 到 n,有 n 种情况,猜哪个数字使得获胜概率最大。而只要小 11 A 猜测的结果比小B 更接近c,就是获胜。 import java.util.Scanner; public class Main { public static void main(String args[]) { Scanner cin = new Scanner(System.in); while (cin.hasNext()) { int n = cin.nextInt(); int b = cin.nextInt(); int max = 0; int index = 0; for (int i = 1; i <= n; i++) { // 列举小 A 的选择求出,该选择下对应 的获胜情况, int win = 0; // 小 A 选择 i,随机数为任意情况下小B 获胜大小 for (int c = 1; c <= n; c++) { if (Math.abs(c - i) < Math.abs(c - b)) // 小A 获胜 win++; } if (win > max) { max = win; index = i; } } System.out.println(index); } 12 cin.close(); } } 讨论 评论区有人回复说用简单的数学方法。就是说,给定区间 1~n,判断小 B 取值 在中位数的哪侧,也就是说,如果小 B 取值在中位数右侧,那小A 只要取值 为小B 取值数-1,反之,如果小B 取值在中位数左侧,那小A 只要取值为小 B 取值数+1。更具体地说: 情况一:如果小 B 取值在中位数右侧,随机数的取值为 1~n,所以如果小 A 只要取值为 B-1,那么随机数分布在小 B 左侧的情况下,小A 赢。(因为左 侧明显多嘛) 反之。 代码比较简单,判断和中位数的大小。然后输出。
2、小 B 最近迷上了字符串处理技术,他设计了各种处理方式,并计算字符串的 属性。这次也不例外,他定义了一种新的字符置换方式。小 B 研究的字符串 由 ASCII 码字母和“.”构成,这次的研究对象是“.”。他关心的对象是字 符串中出现的连续两个“.”。若每次操作把其中最开始的连续两个“.”以一 个“.”替代,则可以将函数 f(s) 定义为使得串中不出现连续两个“.”的最 小置换次数。 现考虑 m 个字符替换操作,每次将指定位置的字符替换为给定的字符,求替 13 换后函数 f(s)的值。
【思路】
输入有若干行,每组的第一行为两个整数 n 和 m,1 <= n, m <= 300000,表 示字符串的长度和字符串替换操作的次数,第二行为所给的字符串,随后紧跟 着m 行操作,每行由一个正整数x 和一个字母 c 组成,表示将字符串位置 m 出的字符置换为字母c。 输出:对每组输入的每个置换操作,在单独的行中输出函数 f(s)的结果。题 目分析 题目的关键是函数 f(s)的实现。一个连续“.”,返回 0; 两个连续“.”,返回 1; 三个连续“.”,返回 2; 四个连续“.”,返回 3; ... 所以规律就是有 n 个连续“.”,返回 n-1; 这个题目我卡在字符串处理上,你敢信,一种就是像我下面写的这种方法, 另一种就是可以转换为字符数组,然后进行处理。 下面这个版本我本机测试通过 import java.util.Scanner; public class Main { public static int dealString(String str) { int left1 = str.indexOf(\'.\'), left2 = left1; int count = 0; while (left1 < str.length() && left2 < str.length()) { if (str.charAt(left2) == \'.\') { 14 while (left2 < str.length() && str.charAt(left2) == \'.\') left2++; int tmp = left2 - left1 - 1; count += tmp; } if (left2 < str.length() && str.charAt(left2) != \'.\') { left2++; left1 = left2; } } return count; } public static void main(String[] args) { Scanner cin = new Scanner(System.in); while (cin.hasNext()) { int n = cin.nextInt(); int m = cin.nextInt(); String str = cin.next(); for (int i = 1; i <= m; i++) { int index = cin.nextInt(); String ch = cin.next(); String tmp = ""; if (index > 1) tmp = str.substring(0, index - 1); str = tmp + ch + str.substring(index);//替换字符 int count = dealString(str); System.out.println(count); 15 } } cin.close(); }
想要更多360实习、校招的机会,请点击这里