【小米笔试题】三道编程题
小米秋招笔试题,后面一道题正确率只有75%,先记下来,过后有时间改正。
【正确率100%】
//求任一正整数的阶乘(注意:是任意正整数) 1 import java.util.ArrayList; 2 import java.util.List; 3 import java.util.Scanner; 4 5 6 public class Main { 7 public static void main(String[] args){ 8 List<Integer> datas = new ArrayList<Integer>(); 9 datas.add(1); 10 Scanner sc = new Scanner(System.in); 11 while(sc.hasNext()) { 12 int n = sc.nextInt(); 13 14 for(int i=1;i<=n;i++){ 15 for(int j=0;j<datas.size();j++){ 16 datas.set(j, datas.get(j)*i); 17 } 18 for(int j=0;j<datas.size();j++){ 19 if(datas.get(j)>9){ 20 if(datas.size()==j+1){ 21 datas.add(j+1,0); //这里要注意进位,调用add 22 } 23 datas.set(j+1, datas.get(j+1)+datas.get(j)/10); 24 datas.set(j, datas.get(j)%10); 25 } 26 } 27 } 28 for(int index=datas.size()-1;index>-1;index--){ 29 System.out.print(datas.get(index)); 30 } 31 } 32 } 33 }
兔子从A地到B地,当中每1公里有一个休息站。兔子体力每次最多可连续行走2公里,也就是说兔子可以选择行走1公里或者2公里进行休息,然后继续前进。假设A地到B地距离N公里,求兔子的行走休息方案有多少种(每一种组合算一种)。
备注:可不考虑整型溢出的问题,测试样例结果保证不超出2^31。
【通过率100%】
1 import java.util.Scanner; 2 public class Main { 3 public static void main(String[] args) { 4 Scanner sc = new Scanner(System.in); 5 while (sc.hasNext()) { 6 int n = sc.nextInt(); 7 int a = 1, b = 0, c = 0; 8 for (int i = 0; i <= n; i++) { 9 c = a + b; 10 a = b; 11 b = c; 12 } 13 System.out.println(c); 14 } 15 } 16 }
给定文本text和待匹配字符串pattern,二者皆只包含小写字母,并且不为空。
在text中找出匹配pattern的最短字符串,匹配指按序包含pattern,但不要求pattern连续。
如text为abaacxbcbbbbacc,pattern为cbc,text中满足条件的是abaacxbcbbbbacc红色部分。
输入
每行一个text和一个pattern,用空格分隔
输出
输出最短匹配序列起止位置,用空格分隔。若无满足条件的答案,则起止均为-1
样例输入
abaacxbcbbbbacc cbc
abc x
aaabcac ac
样例输出
4 7
-1 -1
5 6
【正确率75%】
1 import java.util.Scanner; 2 3 public class Main { 4 public static void main(String[] args) { 5 Scanner sc = new Scanner(System.in); 6 while (sc.hasNext()) { 7 String text = sc.next(); 8 String patt = sc.next(); 9 int start; 10 if (text.contains(patt)) { 11 System.out.println(text.indexOf(patt) + " " + (text.indexOf(patt) + patt.length() - 1)); 12 }else { 13 start = text.indexOf(patt.charAt(0)); 14 text.substring(start + 1); 15 int end = text.indexOf(patt.charAt(patt.length() - 1)) + start - 1; 16 if (start == -1) { 17 System.out.println(start + " " + start); 18 continue; 19 } 20 System.out.println(start + " " + end); 21 } 22 } 23 } 24 }