UVA 1590 IP Networks JAVA
阿新 • • 發佈:2019-01-28
works esc char ext 題意 har pen -s 什麽
題意:輸入m代表接下來的數據個數,計算接下來輸入數據的網絡掩碼,和最小網絡地址。
思路:
①子網掩碼:先將數據轉為二進制,判斷從哪一位開始有數據不一樣,記下下標index,
則子網掩碼是index的前面是1,後面是0(2#),就是子網掩碼,再轉為10#輸出;
②最小網絡地址:用任意一個IP與子網掩碼進行按位與運算得出最小IP,與運算的符號為&。
1 import java.util.Scanner; 2 3 public class UVA1590 { 4 5 public static void main(String[] args) { 6 Scanner scanner=newScanner(System.in); 7 int m; 8 while(scanner.hasNext()) 9 { 10 m=scanner.nextInt(); 11 String[][] strTwo=new String[1000][4];//輸入的數據存為二進制 12 StringBuffer[] stringBuffer=new StringBuffer[4]; 13 int[] resCover=newint[4];//掩碼結果 10# 14 int[] resMin=new int[4];//最小網絡地址結果 10# 15 int [][] numTen = new int[1000][4];//輸入的數據存為10進制 16 for(int i=0;i<m;i++) 17 { 18 String string=scanner.next(); 19 String [] strTen=string.split("\\.");//"."有特殊含義,要加\\ 20 int [] numTwo=new int[4]; 21 for(int j=0;j<strTen.length;j++) 22 { 23 //ε=(′ο`*)))唉,不知道為什麽我這麽麻煩 24 numTen[i][j]=Integer.parseInt(strTen[j].toString());//string->int 10# 25 strTwo[i][j]=Integer.toBinaryString(numTen[i][j]);//10#->2# 26 numTwo[j]=Integer.parseInt(strTwo[i][j]);//string->int 2# 27 strTwo[i][j]=String.format("%08d", numTwo[j]);//2# 標準化,如果有1000->00001000 28 } 29 } 30 int index=32;//最左一個不同出現的地方的下標,他前面全是1,後面全是0(子網掩碼) 31 boolean flag=true; 32 for(int j=0;j<4&&flag;j++) 33 { 34 35 for(int k=0;k<8&&flag;k++) 36 { 37 char ch=strTwo[0][j].charAt(k); 38 for(int l=0;l<m;l++) 39 { 40 if(strTwo[l][j].charAt(k)!=ch) 41 { 42 index=(j)*8+k; 43 flag=false; 44 break; 45 } 46 } 47 } 48 } 49 StringBuffer Cover=new StringBuffer(); 50 StringBuffer[] strCover=new StringBuffer[4]; 51 strCover[0]=new StringBuffer(); 52 strCover[1]=new StringBuffer(); 53 strCover[2]=new StringBuffer(); 54 strCover[3]=new StringBuffer(); 55 for(int j=0,n=0;j<32;j++) 56 { 57 if(j<index) 58 strCover[j/8].append(‘1‘); 59 else 60 strCover[j/8].append(‘0‘); 61 } 62 for(int j=0;j<4;j++) 63 { 64 resCover[j]=Integer.parseInt(strCover[j].toString(), 2); 65 } 66 67 int indexmin=0;//與掩碼相與的下標 68 69 for(int j=0;j<4;j++) 70 { 71 int res=resCover[j]&numTen[indexmin][j];//任意一個子網與掩碼相與,則為最小網絡地址 72 resMin[j]=res; 73 } 74 75 for(int j=0;j<4;j++) 76 { 77 if(j!=0) 78 System.out.print("."); 79 System.out.print(resMin[j]); 80 } 81 System.out.print("\n"); 82 for(int j=0;j<4;j++) 83 { 84 if(j!=0) 85 System.out.print("."); 86 System.out.print(resCover[j]); 87 } 88 System.out.print("\n"); 89 } 90 } 91 }
UVA 1590 IP Networks JAVA