【小米笔试题】三道编程题

小米秋招笔试题,后面一道题正确率只有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 }

 

posted @ 2017-09-18 21:10  菜鸟更要虚心学习  阅读(980)  评论(0编辑  收藏  举报