滴滴笔试题(测试开发)

1.题目描述:
//X 和同学跳高跳远
// 给定一个n为人数
//第二行和第三行输入n个字母 代表n个人的成绩排名(每个字母都不相同)
//例:输入 10
// ABCDEFXIGH X前面有ABCDEF
// AHCXBDEFIG X前面有AHC 所以两次相比 X 最好成绩是第三名 最差成绩第八名
//输出 3 8

解题思路:
将X前面的同学放在set1 中,set2中放X后面的同学
判断set1中包含多少个第二行在X前面的同学,set2 中包含多少个第二行在X后面的同学

import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
//X 和同学跳高跳远
// 给定一个n为人数
//第二行和第三行输入n个字母 代表n个人的成绩排名(每个字母都不相同)
//例:输入 10
//        ABCDEFXIGH  X前面有ABCDEF
//        AHCXBDEFIG  X前面有AHC 所以两次相比 X 最好成绩是第三名 最差成绩第八名
//输出 3 8
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        String[] arr1 = new String[n];
        String[] arr2 = new String[n];
        for (int i = 0;i < n;i++){
            arr1[i] = sc.next();
        }
        for (int i = 0;i < n;i++){
            arr2[i] = sc.next();
        }
        int count = 0;
        int count2 = 0;
        for (int i = 0;i < n;i++){
            if (arr1[i].equals("X")){
                count = i;
                break;
            }
        }
        for (int i = 0;i < n;i++){
            if (arr2[i].equals("X")){
                count2 = i;
                break;
            }
        }
        //System.out.println(count + " " + count2);
        Set set = new HashSet<>();
        Set set2 = new HashSet<>();
        for (int i = 0;i < count;i++){
            set.add(arr1[i]);
        }
        for (int i = count;i < n;i++){
            set2.add(arr1[i]);
        }
        int first = 1;
        int end = n+1;
        for (int i = 0;i < count2;i++){
            if (set.contains(arr2[i])){
                first++;
            }
        }
        for (int i = count2;i < n;i++){
            if (set2.contains(arr2[i])){
                end--;
            }
        }
        System.out.println(first + " " + end);
    }
}

2.螺旋打印斐波那契数列
输入 3
输出
滴滴笔试题(测试开发)_第1张图片
输入 4
输出
滴滴笔试题(测试开发)_第2张图片

import java.util.Scanner;
//螺旋打印斐波那契数
public class Main2 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[][] res = new int[n][n];
        int right = 1,down = 2,left = 3,up = 4;
        int num = n*n;
        int dir = right;//标记
        int[] arr = new int[num];
        arr[0] = 1;
        arr[1] = 1;
        for (int i = 2;i < num;i++){
            arr[i] = arr[i-1] + arr[i-2];
        }

        int i = 0,j = 0;//i,j必须放外面,否则打印有误
        for (int p = num-1;p >= 0;p--){
            res[i][j] = arr[p];
            if (dir == right){ //从左向右打印
                if (j +1 < n && res[i][j+1] == 0){
                    j++;
                }else {//打印到头,从上到下打印
                    i++;
                    dir = down;
                    continue;
                }
            }
            if (dir == down){//从上到下打印
                if (i+1 < n && res[i+1][j] == 0){
                    i++;
                }else {
                    j--;
                    dir = left;//打印到头,从右到左打印
                    continue;
                }
            }
            if (dir == left){//从右到左打印
                if (j-1 >= 0 && res[i][j-1] == 0) {
                    j--;
                }else {
                    i--;
                    dir = up;//打印到头,从下到上打印
                    continue;
                }
            }
            if (dir == up){//从下到上打印
                if (i-1 >= 0 && res[i-1][j] == 0){
                    i--;
                }else {
                    j++;
                    dir = right;//打印到头,从左到右打印
                    continue;
                }
            }
        }
        for (int p = 0;p < res.length;p++){
            for (int q = 0;q < res.length;q++){
                System.out.print(res[p][q] + " ");
            }
            System.out.println();
        }
    }
}

你可能感兴趣的:(滴滴笔试题(测试开发))