日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

UVa 1590 - IP Networks

發布時間:2025/7/14 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 UVa 1590 - IP Networks 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
UVa 1590 - IP Networks

題意:
可以用一個網絡地址和一個子網掩碼描述一個子網(即連續的IP地址范圍)。其中子網掩碼包含32個二進制位,前32-n位為1,后n位為0,網絡地址的前32-n位任意,后n位為0。所有前32-n位和網絡地址的IP都屬于此網絡。題目要求輸入m個IP地址,求對應的網絡地址和子網掩碼。

解題思路:
用數組分別記錄輸入IP地址中的四位,排序后將最小值和最大值轉換成二進制,逐位比較即可得出相同位數n。
具體實現上我是寫了binary和decimal兩個函數來實現二進制和十進制的轉換,數組a,b,c,d分別存的是ip(min),ip(max),address,mask的二進制表示,對數組a,b進行逐位比對求出n。address的前32-n位和a相同,后n位為0;mask前32-n位為1,后n位為0,然后轉換成十進制輸出就好。

AC代碼:

#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; void binary(int a,int s[]); int decimal(int s[]); int main(void){ int n,i,t,address[4],mask[4],ip[4][1005],a[32],b[32],c[32],d[32]; while(~scanf("%d",&n)){for(i=0;i<n;i++)scanf("%d.%d.%d.%d",&ip[0][i],&ip[1][i],&ip[2][i],&ip[3][i]);for(i=0;i<4;i++) sort(ip[i],ip[i]+n);for(i=0;i<4;i++){binary(ip[i][0],a+8*i);binary(ip[i][n-1],b+8*i);}for(i=0;i<32;i++) if(a[i]!=b[i]) break;t=32-i;for(i=0;i<32;i++){if(i<32-t) {c[i]=a[i];d[i]=1;}else {c[i]=0;d[i]=0;}}for(i=0;i<4;i++) {address[i]=decimal(c+i*8);mask[i]=decimal(d+i*8);}printf("%d.%d.%d.%d\n",address[0],address[1],address[2],address[3]);printf("%d.%d.%d.%d\n",mask[0],mask[1],mask[2],mask[3]);}return 0; } void binary(int a,int s[]){ int i=7; while(a>0){s[i--]=a%2;a/=2; } if(i>=0){ for(;i>=0;i--) s[i]=0; } } int decimal(int s[]){ int i,n=0,t=1; for(i=7;i>=0;i--) {if(s[i]) n+=t;t*=2; } return n; } 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的UVa 1590 - IP Networks的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。