滴滴笔试题——又见~

题目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 }
原文地址:https://www.cnblogs.com/10081-AA/p/10828349.html