美团0325笔试

第一题

题目描述

定义1-9的置换首先给出你一个整数,可能为正也可能为负,这个数字中仅包含数字1-9,现在定义一个1-9的置换,即指定将整数中的某个数字按顺序变换为另一个数字,请你输出变换以后的数字是多少

未AC

第二题

题目描述

最外面的边缘是白色。最外层的圆是黑色,往里一层是白色,再往里是黑色,以此类推……输入N表示所有圆的个数,a[i]表示第i个圆的半径(1<=i<=N)。求黑***域的总面积(结果四舍五入)

通过率45%

解题思路

分为两类:内部实心圆全黑和全白,然后分别数学计算

代码

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int num = in.nextInt();
        int[] circler = new int[num];
        for(int i=0;i<num;i++){
            circler[i] = in.nextInt();
        }
        double blackarea = 0;
        if(num%2 == 1){
            //内部为黑圆
            blackarea += Math.PI *(
                circler[0]*circler[0]);
            for(int i =1; i< num-1; i+=2){
                blackarea += Math.PI *(
                    circler[i+1]*circler[i+1]-
                        circler[i]*circler[i]
                );
            }
        }else {
            for(int i= 0;i<num-1;i+=2){
                blackarea += Math.PI *(
                    circler[i+1]*circler[i+1]-
                        circler[i]*circler[i]
                );
            }
        }
        //要四舍五入
        System.out.printf("%.5f",blackarea);
    }
}

第三题

题目描述

一个序列是有趣的需要满足当且仅当这个序列的每一个元素ai 满足i 整除ai 。

现在给定一个长度为n的数组,问这个数组有多少个非空的子序列是有趣的,由于答案可能比较大,只需要输出在模998244353意义下答案的就行了。一个长度为n的数组的非空子序列定义为从这个数组中移除至多n-1个元素后剩下的元素有序按照原顺序形成的数组。比如说对于数组[3,2,1],它的非空子序列有[3],[2],[1],[3,2],[3,1],[2,1],[3,2,1]。

超时,通过率18%

解题思路

用dp[i]表示长度为i的“有趣”子序列的个数,求取长度为i的“有趣”子序列个数dp[i],并记录对应的所有末尾的下标index[1-j],再遍历所有末尾的下标index[1-j],每次找到index[j]后的所有能被(i+1)整除的数则dp[i+1]加一。通过dp[i]算出dp[i+1]。以此类推

import java.util.Arrays;
import java.util.Scanner;

public class Main {

    //非空子序列,模998244353
    //5
    // 1 1 1 1 2 9种
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int num = in.nextInt();
        int[] arrays = new  int[num];
        //动态规划
        int[] dp = new int[num];
        dp[0] = num;
        int[][] index = new int[num][num];
        for(int i=0;i<num;i++){
            Arrays.fill(index[i],-1);
            arrays[i] = in.nextInt();
            index[0][i] = i;
        }
        //先找出所有子序列,后判断是否有趣
        //还有一个参数记录所有末尾字符的下标,不去重复
        //        dp[i] = dp[i-1] + i的倍数;
        for(int j = 1;j < num-1;j++){
            int m = 0;
            for(Integer tempnum : index[j-1]){
                if(tempnum == -1){
                    break;
                }
                for(int k = tempnum +1;k<num;k++){
                    if(arrays[k] % (j+1) == 0){
                        dp[j] += 1;
                        index[j][m++] = k;
                    }
                }
            }
        }
        int result = 0;
        for(int i =0;i<num;i++){
            result += dp[i];
        }
        System.out.println(result);//换行
    }
}

第四题

题目描述

小仓酷爱射击运动。今天的小仓会进行N轮射击,已知每次击中靶心的概率为p/q,每当小仓击中靶心,如果是连续k次击中,那么小仓会获得a[k]的得分。小仓希望知道最后她的期望得分是多少。

未AC

#美团点评2020春招##美团##笔试题目#
全部评论
第一题咋做啊,超时
点赞 回复
分享
发布于 2020-04-02 12:54
#include <bits/stdc++.h> using namespace std; char num[1005]; char change[10]; int main() {     int tmp;     scanf("%s",num);     for(int i=1;i<10;++i){         scanf("%d",&tmp);         change[i]=tmp+'0';     }     for(int i=0;num[i];++i){         if(num[i]!='-'){             num[i]=change[num[i]-'0'];         }     }     printf("%s",num);     return 0; }
点赞 回复
分享
发布于 2020-04-02 21:01
联想
校招火热招聘中
官网直投

相关推荐

4 21 评论
分享
牛客网
牛客企业服务