• 滴滴笔试题——又见~


    题目1:给定两个数R和n,输出R的n次方,其中0.0<R<99.999, 0<n<=25

    输入描述:多组测试用例,请参考例题的输入处理 输入每行一个浮点数 R 其中0.0 < R <99.999, 一个整数 n 其中0 < n <=25

    输出描述:输出R的n次方

    示例1

    输入:95.123 12 0.1 1

    输出:548815620517731830194541.899025343415715973535967221869852721 0.1

    代码:
     1 import java.math.BigDecimal;
     2 import java.util.Scanner;
     3  
     4 public class Main {
     5     public static void main(String [] args) {
     6         String r;
     7         int n;
     8         String s;
     9         Scanner sc = new Scanner(System.in);
    10         while(sc.hasNext()) {
    11             r = sc.next();//用String来存储,因为double和float都是不能准确的表示小数的,都是以概述来表示的
    12             n = sc.nextInt();
    13             BigDecimal d = new BigDecimal(r);
    14             BigDecimal ans = new BigDecimal(r);
    15             for(int i =1;i<n;i++) {
    16                 ans = ans.multiply(d);
    17             }
    18             s = ans.stripTrailingZeros().toPlainString();//去除不必要的零,转换为字符串,防止科学计数法
    19             System.out.println(s);
    20         }
    21     }
    22 }

    题目2:

    给定一个m行n列的二维地图, 初始化每个单元都是水.
    操作addLand 把单元格(row,col)变成陆地.
    岛屿定义为一系列相连的被水单元包围的陆地单元, 横向或纵向相邻的陆地称为相连(斜对角不算).
    在一系列addLand的操作过程中, 给出每次addLand操作后岛屿的个数.
    二维地图的每条边界外侧假定都是水.

    输入描述:

    多组测试数据,请参考例题处理 每组数据k+3行, k表示addLand操作次数 第一行:表示行数m 第二行:表示列数n 第三行:表示addLand操作次数k 第4~k+3行:row col 表示addLand的坐标。注意超过边界的坐标是无效的。
    输出描述:

    一行,k个整数, 表示每次addLand操作后岛屿的个数, 用空格隔开,结尾无空格
    输入例子1:

    3
    3
    4
    0 0
    0 1
    1 2
    2 1
    输出例子1:

    1 1 2 3

    代码:

     1 import java.util.*;
     2 public class Main {
     3     public static void main(String [] args) {
     4         Scanner sc = new Scanner(System.in);
     5         while(sc.hasNext()) {
     6             int m = sc.nextInt();
     7             int n = sc.nextInt();
     8             int k = sc.nextInt();
     9             int count = 0;
    10             int[][] island= new int[m][n];//整个区域
    11             int[][] num = new int[k][2];//出现断点的地方
    12             ArrayList<Integer> list = new ArrayList();
    13             for(int i=0;i<k;i++) {//存储可能出现岛屿的地方
    14                 num[i][0] = sc.nextInt();
    15                 num[i][1] = sc.nextInt();
    16             }
    17             for(int i =0;i<k;i++) {
    18                 int a = num[i][0];
    19                 int b = num[i][1];
    20                 if(a<0||b<0||a>=m||b>=n) {//判断是否越界
    21                     list.add(count);//若越界,则岛屿数不变
    22                     continue;//跳出本次for循环,到下一次循环
    23                 }
    24                 if(island[a][b]==1) {//判断新的点之前已经变为岛屿
    25                     list.add(count);
    26                     continue;
    27                 }
    28                 island[a][b] =1;//若未越界,且是一个新的点,则将其置1
    29                 if(a-1>=0&&island[a-1][b]==1) {
    30                     if(count!=0)count--;//若该新点为桥,则将岛屿减一
    31                 }
    32                 if(a+1<m&&island[a+1][b]==1) {
    33                     if(count!=0)count--;
    34                 }
    35                 if(b-1>=0&&island[a][b-1]==1) {
    36                     if(count!=0)count--;//若该新点为桥,则将岛屿减一
    37                 }
    38                 if(b+1<m&&island[a][b+1]==1) {
    39                     if(count!=0)count--;
    40                 }
    41                 count++;//上述操作判断其不是桥,故岛屿数加一;
    42                 list.add(count);
    43             }
    44             for(int i=0;i<list.size();i++) {
    45                 System.out.print(list.get(i)+" ");//输出岛屿
    46             }
    47             //System.out.println();//此处的作用为下一次输入的时候另起一行             
    48         }
    49     }
    50 }
  • 相关阅读:
    二叉搜索树与双向链表
    TCP 三次握手与四次挥手
    复杂链表的复制
    二叉树中和为某一值的路径
    二叉搜索树的后序遍历序列
    从上往下打印二叉树
    栈的压入、弹出序列
    jenkins 持续集成和交付——一个构件小栗子前置(三)
    jenkins 持续集成和交付——gogs安装(外篇)
    jenkins 持续集成和交付——安装与账户安全还有凭证(二)
  • 原文地址:https://www.cnblogs.com/10081-AA/p/10828349.html
Copyright © 2020-2023  润新知