滴滴笔试题——又见~
题目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 }