首页 > 滴滴后端笔试题解(2道)
头像
江湖battle为offer
编辑于 2020-08-21 20:54
+ 关注

滴滴后端笔试题解(2道)

第一题
输入n,找两个数(分别为ABC,和ACC格式,A不为0,A B C各不相同)的和为n;有这样的数的话,就先输出多少对,每行输出这两个数(按照每对中ABC的大小排序输出)
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner scin = new Scanner(System.in);
        String str = scin.nextLine();
        int n = Integer.valueOf(str);
        List<Integer> list = new ArrayList<>();

        if(n<2000&&n>100&&n%2==0)
            for (int i = 1; i <= 9; i++) {
                for (int j = 0; j <= 9; j++) {
                    if(j==i) continue;
                    for (int k = 0; k <= 9; k++) {
                        if(k==j||k==i) continue;
                        int x = i*100+j*10+k;
                        int y = i*100+k*10+k;
                        if(x+y==n){
                            list.add(x);
                        }
                    }
                }
            }
        System.out.println(list.size());
        if(list.size()>0){
            Collections.sort(list);
            for (int i = 0; i < list.size(); i++) {
                int kk = n - list.get(i);
                System.out.println(list.get(i) + " " + kk);
            }
        }
    }
}

第二题:
以迂回的形式在一个n*n的数组中保存斐波那契数列,已知数列最小的前两位都为1,最大的一位在数组第一行第一列,请按行输出这个数组(应该是剑指offer里原题稍微改版)
唯一要注意的是数组要以long类型保存,int的话会溢出;
import java.util.*;
public class Main{
    public static void main(String[] args) {
        Scanner scin = new Scanner(System.in);
        String str = scin.nextLine();
        int n = Integer.valueOf(str);
        if(n<=0) return;
        long []arr = new long[n*n];

        if(n==1){
            arr[0] = 1;
        }
        if(n>=2){
            arr[0]=1;arr[1]=1;
            for (int i = 2; i < n * n; i++) {
                arr[i] = arr[i-1]+arr[i-2];
            }
        }
        long matrix[][] = new long[n][n];
        int times =(n-1)/2+1;
        int index = n*n-1;
        for(int i=0;i<times;i++) { //把数组的数放到矩阵中
            for (int a = i; a < n - i; a++) {
                matrix[i][a] = arr[index--];
            }
            for (int b = i + 1; b < n - i; b++) {
                matrix[b][n - i - 1] = arr[index--];
            }
            for (int c = n - i - 2; c >= i && (i != n - 1 - i); c--) {
                matrix[n - i - 1][c] = arr[index--];
            }
            for (int d = n - i - 2; d > i && (i != n - i - 1); d--) {
                matrix[d][i] = arr[index--];
            }

        }
        for (int i = 0; i < n; i++) {  //按行打印出这个矩阵
            for (int j = 0; j < n-1; j++) {
                System.out.print(matrix[i][j]+" ");
            }
            System.out.println(matrix[i][n-1]);
        }
    }
}

希望来个面试!!



全部评论

(0) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

近期热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐