滴滴筆試題——又見~

題目1:給定兩個數R和n,輸出R的n次方,其中0.0<R<99.999, 0<n<=25java

輸入描述:多組測試用例,請參考例題的輸入處理 輸入每行一個浮點數 R 其中0.0 < R <99.999, 一個整數 n 其中0 < n <=25測試

輸出描述:輸出R的n次方spa

示例1

輸入:95.123 12 0.1 1code

輸出:548815620517731830194541.899025343415715973535967221869852721 0.1blog

代碼:
 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:ip

給定一個m行n列的二維地圖, 初始化每一個單元都是水.
操做addLand 把單元格(row,col)變成陸地.
島嶼定義爲一系列相連的被水單元包圍的陸地單元, 橫向或縱向相鄰的陸地稱爲相連(斜對角不算).
在一系列addLand的操做過程當中, 給出每次addLand操做後島嶼的個數.
二維地圖的每條邊界外側假定都是水.

輸入描述:ci

多組測試數據,請參考例題處理 每組數據k+3行, k表示addLand操做次數 第一行:表示行數m 第二行:表示列數n 第三行:表示addLand操做次數k 第4~k+3行:row col 表示addLand的座標。注意超過邊界的座標是無效的。
輸出描述:字符串

一行,k個整數, 表示每次addLand操做後島嶼的個數, 用空格隔開,結尾無空格
輸入例子1:get

3
3
4
0 0
0 1
1 2
2 1
輸出例子1:io

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 }
相關文章
相關標籤/搜索