1-【软件雏鹰计划-Java版】第一周编程题目练习题解
公共字符
题目
给定 m 个字符串,请计算有哪些字符在所有字符串中都出现过 n 次及以上。
时间限制: C/C++ 1000ms, 其他语言:2000ms
内存限制: C/C++ 64MB, 其他语言:128MB
输入
首行是整数 n ,取值范围 [1,100]
第二行是整数 m ,表示字符串的个数,取值范围 [1,100]
接下来 m 行,每行一个仅由英文字母和数字组成的字符串,长度范围 [1,1000)
输出
按ASCII码升序输出所有符合要求的字符序列; 如果没有符合要求的字符,则输出空序列[]。
样例1
1 | 输入: |
样例2
1 | 输入: |
维护一个resultChars[i],代表ASCII码为i的字符是否在每个字符串中都出现了n次或以上
对于每个字符串,统计每个字符的出现次数,并根据统计结果更新resultChars
最后遍历resultChars,值为true的则将其ASCII码(即数组索引)输出到结果即可
1 | private static char[] getNTimesCharacter(int nValue, String[] strings) { |
呼叫转移
题目
呼叫转移是指您的电话无法接听或您不愿接电话,可以将来电转移到其它电话号码上。它是电信业一项传统通信业务,又称呼叫前转、呼入转移。
- 用户被呼叫时的状态有4种:
idle
,busy
,no-response
,unreachable
- 用户可登记的5种呼叫转移,格式为
type number
,type代表转移种类, number代表转移号码: - type为 0:无条件转移,优先级最高,用户处于任何状态都触发此转移
- type为 1:用户状态
busy
时触发此转移 - type为 2:用户状态
no-response
时触发此转移 - type为 3:用户状态
unreachable
时触发此转移 - type为 4:默认转移,优先级最低,用户不是
idle
状态时,且无法触发上述四种转移,触发此转移
注:同一个状态可登记多次,以最后一次登记为准。
现给出某一用户当前的用户状态,以及其登记的若干个呼叫转移号码,请输出最终的呼叫结果:
- 若发生转移,则输出转移号码
- 若用户状态为idle,且未发生转移时,则呼叫本机成功,输出
success
- 若呼叫失败:既没有发生转移,也没有呼叫本机成功,则输出
failure
。例如,用户状态为 busy,但用户既未登记 type 为 0 或 1 或 4 的呼叫转移,则呼叫失败。
时间限制: C/C++ 1000ms, 其他语言:2000ms
内存限制: C/C++ 256MB, 其他语言:512MB
输入
第一行是数字 num 和 字符串 status:num代表呼叫转移登记的次数( 0 < N <= 20),status表示用户被呼叫时的状态。
接下来 num 行是用户的呼叫转移登记操作,转移号码长度 6-15位,用例保证输入合法。
输出
一个字符串,代表最终的呼叫结果
样例1
1 | 输入: |
样例2
1 | 输入: |
样例3
1 | 输入: |
本质上是写一个简单的有限状态机,但是要考虑到的细节比较多
应当存储一个从Type到号码的哈希表,并按照一个优先级顺序给result逐个尝试赋值
- 最高优先级:当tpye0有值时,result总为该值,反之则下一步操作
- 当status为idel时,result总为success,反之则下一步操作
- 当status为busy时,尝试在type1有值时为result赋值,反之则下一步操作
- 当status为no-response时,尝试在type2有值时为result赋值,反之则下一步操作
- 当status为unreachable时,尝试在type3有值时为result赋值,反之则下一步操作
- 尝试在在type4有值时为result赋值,反之则下一步操作
- result值为failure
1 | private static String calling(String status, List<RegCallOperate> regCallForwardNums) { |
大小端整数
题目
计算机中对整型数据的表示有两种方式:大端序和小端序,大端序的高位字节在低地址,小端序的高位字节在高地址。例如:对数字 65538,其4字节表示的大端序内容为00 01 00 02
,小端序内容为02 00 01 00
。
现输入一个字符串表示的十进制整数(含负数),请分别输出以4字节表示的大端序和小端序:
- 负数以补码形式表示。
- 如果输入的整数的值超出 [-2^31, 2^32) 范围,则输出字符串
overflow
。
时间限制: C/C++ 1000ms, 其他语言:2000ms
内存限制: C/C++ 64MB, 其他语言:128MB
输入
十进制整数,以负号-开头表示负数,其它为正整数;数字长度范围:[1,32]。
输入数字不含前导零。
输出
大端序 + \n
+ 小端序;或字符串overflow
。
大端序和小端序的输出格式:每个字节以两位16进制数字表示(16进制数中A-F要大写),字节之间以单空格分隔。
样例1
1 | 输入: |
样例2
1 | 输入: |
样例3
1 | 输入: |
将nums转化为Long,由于十六进制表示/字节表示的数字是8bit一编码的,通过位运算获取每8位的编码结果,将其按顺序存储在一个Byte数组中
分别从左到右输出再从右到左输出一遍字节数组即可
1 | private static String getHexString(String num) { |