给定两个数r和n_输出r的n次方 java_滴滴出行2018编程题
[编程题] CIDR去重
时间限制:1秒
空间限制:65536K
无类别域间路由(CIDR)是一个用于对IPV4地址进行分类表述的方法。CIDR 路由描述的IP地址组的子网mask长度是可变长度, 例如10.0.0.0/22 表示前22位和10.0.0.0相同的网络地址都被覆盖, 22包含了10.0这前两个字段(0-7位,8-15位)和第三个字段的前6位(16-21,即0b000000**), 涵盖了 10.0.0.*, 10.0.1.*, 10.0.2.*, 10.0.3.* 四组ip地址. 在此前提下请实现IP网络中的一个常用的去重操作: 给定一系列 CIDR 路由地址, 其中没有完全等价的路由, 去掉被重复表示的 CIDR 路由, 即去掉已经被其他CIDR路由表示覆盖的路由地址. 例如 10.0.1.1/32 已经被 10.0.0.0/22覆盖了, 如果路由列表中已经有了后者, 就可以去掉前者.
输入描述:
k+1行, k表示输入的CIDR路由个数
第1行:表示路由个数k
第2~k+1行: 表示一个CIDR路由, 形如 x.x.x.x/x
输出描述:
n+1行, n表示去重后剩下的CIDR路由个数
第1行:n
第2~n+1行: 表示一个去重后的CIDR路由, 输出按照输入顺序
输入例子1:
13
192.168.0.0/16
172.24.96.17/32
172.50.137.225/32
202.139.219.192/32
172.24.68.0/24
192.183.125.71/32
201.45.111.138/32
192.168.59.211/32
192.168.26.13/32
172.24.0.0/17
172.24.5.1/32
172.24.68.37/32
172.24.168.32/32
输出例子1:
7
192.168.0.0/16
172.50.137.225/32
202.139.219.192/32
192.183.125.71/32
201.45.111.138/32
172.24.0.0/17
172.24.168.32/32
#include
using namespace std;
struct ipaddr{
string ip;
string front;
bool hided;
ipaddr() {ip = front = ""; hided = false;}
};
int str2num(string str) {
int res = 0;
for (char c : str) {
res *= 10;
res += c - '0';
}
return res;
}
void divide(ipaddr a, int arr[]) {
string tmpstr;
int len = a.ip.length();
int i, j, cnt = 0;
for (i = 0; i < len; ++i) {
tmpstr = "";
tmpstr += a.ip[i];
for (j = i + 1; j < len && a.ip[j] != '.'; ++j) {
tmpstr += a.ip[j];
}
arr[cnt++] = str2num(tmpstr);
i = j;
}
}
string dec2bin(int n) {
string res;
if (n == 0) {
res = "00000000";
}
while (n) {
res += n % 2 + '0';
n /= 2;
}
for (int i = res.length(); i < 8; ++i) {
res += '0';
}
reverse(res.begin(), res.end());
return res;
}
int ishided(ipaddr a, ipaddr b) {
int arrofa[4], arrofb[4];
int frontofa, frontofb;
divide(a, arrofa);
frontofa = str2num(a.front);
divide(b, arrofb);
frontofb = str2num(b.front);
string astr, bstr, aa, bb;
astr = dec2bin(arrofa[0]) + dec2bin(arrofa[1])
+ dec2bin(arrofa[2]) + dec2bin(arrofa[3]);
bstr = dec2bin(arrofb[0]) + dec2bin(arrofb[1])
+ dec2bin(arrofb[2]) + dec2bin(arrofb[3]);
aa = astr.substr(0, frontofa);
bb = bstr.substr(0, frontofb);
int len = min(frontofa , frontofb);
int i;
for (i = 0; i < len; ++i) {
if (aa[i] != bb[i])
break;
}
if (i == len) {
if (frontofa < frontofb)
return 1;
if (frontofa > frontofb)
return -1;
}
return 0;//no hide
}
int rmdulp(ipaddr arr[], int k) {
int n = k;
int hide = 0;
for (int i = 0; i < k; ++i) {
if (arr[i].hided)
continue;
for (int j = i + 1; j < k; ++j) {
if (arr[j].hided) {
continue;
}
hide = ishided(arr[i], arr[j]);
if (hide == 1) {
arr[j].hided = true;
n--;
} else if (hide == -1) {
arr[i].hided = true;
n--;
}
}
}
return n;
}
int main() {
int k, n, npos;
cin >> k;
string s;
ipaddr arr[k];
for (int i = 0; i < k; ++i) {
cin >> s;
npos = s.find('/');
arr[i].ip = s.substr(0, npos);
arr[i].front = s.substr(npos + 1);
}
cout << rmdulp(arr, k) << endl;
for (int i = 0; i < k; ++i) {
if (!arr[i].hided) {
cout << arr[i].ip << '/' << arr[i].front << endl;
}
}
return 0;
}
[编程题] 幂运算
时间限制:1秒
空间限制:131072K
给定两个数R和n,输出R的n次方,其中0.0
输入描述:
多组测试用例,请参考例题的输入处理 输入每行一个浮点数 R 其中0.0 < R <99.999, 一个整数 n 其中0 < n <=25
输出描述:
输出R的n次方
输入例子1:
95.123 12 0.1 1
输出例子1:
548815620517731830194541.899025343415715973535967221869852721 0.1
//取整 幂运算 除10的幂次方
#include
using namespace std;
string addstr(string a, string b) {
int lena = a.length();
int lenb = b.length();
int i, j, tmp, addbit = 0;
string res;
for (i = j = 0; i < lena || j < lenb; ++i, ++j) {
tmp = 0;
if (i < lena) {
tmp = a[i] - '0';
}
if (j < lenb) {
tmp += b[i] - '0';
}
tmp += addbit;
addbit = tmp / 10;
res += tmp % 10 + '0';
}
if (addbit) {
res += '1';
}
return res;
}
string multistr(string a, string b) {
int i, j, tmp, addbit = 0;
int lena = a.length();
int lenb = b.length();
string tmpstr, res = "0";
for (i = lena - 1; i >= 0; --i) {
for (j = 1; j < lena - i; ++j)
tmpstr += '0';
for (j = lenb - 1; j >= 0; --j) {
tmp = (a[i] - '0') * (b[j] - '0') + addbit;
addbit = tmp / 10;
tmpstr += tmp % 10 + '0';
}
if (addbit) {
tmpstr += addbit + '0';
}
addbit = 0;
res = addstr(res, tmpstr);
tmpstr = "";
}
reverse(res.begin(), res.end());
return res;
}
string spown(string s, int n) {
string res = s;
for (int i = 1; i < n; ++i) {
res = multistr(res, s);
}
return res;
}
int main() {
string r;
int i, n;
cin >> r >> n;
int len = r.length();
int npos = r.find('.');
int div = 0;
string s;
if (npos > -1) {
for (i = len - 1; i > npos; --i) {
if (r[i] != '0')
break;
}
r = r.substr(0, i + 1);
s = r.substr(0, npos);
s += r.substr(npos + 1);
s = spown(s, n);
div = i - npos;
int slen = s.length();
if (slen <= n) {
cout << "0.";
for (i = 0; i < n - slen; ++i)
cout << '0';
cout << s << endl;
} else {
cout << s.substr(0, slen - div * n) << ".";
cout << s.substr(slen - div * n) << endl;
}
} else {
s = r;
s = spown(s, n) ;
cout << s << endl;
}
return 0;
}
给定两个数r和n_输出r的n次方 java_滴滴出行2018编程题相关推荐
- 【c语言】输入两个数,交换这两个数后,再输出
<程序设计基础实训指导教程-c语言>杨莉 龚义建 科学出版社 ISBN 978-7-03-032846-5 p9 2.1.2 上机实训内容 [实训内容3] 编程实现:输入两个数,交换这两个 ...
- oj网站的训练题:输入两个数A,B,输出A+B的值(标准题解)
题目描述: 输入两个数A,B,输出A+B的值. 输入: 多组数据:每组由两个整数(a和b)构成,a和b之间用空格隔开,每组输入单独占一行. 当输入为 0 0 时,输入结束.0 0这组数据不处理. 输出 ...
- 用c语言编写两个数的最小公倍数,用C语言编写程序求两个数的最小公倍数,并输出...
如图使用辗转相除法求最小公倍数: 方法步骤: 一.打开VC2010(或其他C语言编译器),新建项目-选择Win32为控制台应用程序-命名-确定 二.选择源文件-添加-新建项 三.选择C++文件-命名. ...
- js-输入两个数将最大的输出
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head><me ...
- c语言输入若干数输出最小值循环结构,C语言循环结构程序设计编程题
<C语言循环结构程序设计编程题>由会员分享,可在线阅读,更多相关<C语言循环结构程序设计编程题(3页珍藏版)>请在人人文库网上搜索. 1.实验3循环结构程序设计.实验目的:1 ...
- 小西的快乐乘法表(想不到怎么做到同时输入两个数,并同时输出两张乘法表,求助)
我只能写出输出一个乘法表的代码,在下面 9月10号!新生小西高兴的走到广西大学,看到了正门的十二根柱子,突然想开始背诵乘法表! 不过小西已经是大学生了!所以想背任意前A行乘法表! Input 输入多行 ...
- python怎么从键盘输入两个数然后求和并输出_C语音的题:从键盘输入两个整数,要求求和然后输出和。应该怎么做?...
展开全部 代码如下: using System; using System.Collections.Generic; namespace TestProject { class Program { s ...
- C语言比较两个数的大小,输出较大的数
第一种: #include<stdio.h> int Max(int a,int b) //创建一个函数对a b进行大小比较,输出最大值 { if (a < b) ...
- ACMNO.30 C语言-宏交换 定义一个带参的宏,使两个参数的值互换,并写出程序,输入两个数作为使用宏时的实参。输出已交换后的两个值。
题目描述 定义一个带参的宏,使两个参数的值互换,并写出程序,输入两个数作为使用宏时的实参.输出已交换后的两个值. 输入 两个数,空格隔开 输出 交换后的两个数,空格隔开 样例输入 1 2 样例输出 2 ...
最新文章
- S2-045漏洞利用工具解决方案
- android 命令启动服务,adb 命令
- 高通平台点亮LCD个人总结
- 区块链,使用 Go-Ethereum 搭建以太坊私有链
- 没有收到回复的同学注意了,用它一键查询!
- lampp mysql最大连接数_mysql连接数问题备份
- 【实用】Pyinstaller UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0xce in position解决方案
- 5、只出现一次的数字
- 10个英文手写字体下载
- CentOS6.5 yum源配置
- uniapp app端调起高德地图导航
- 微信小程序豆瓣电影(上)
- python中的head函数_Pandas DataFrame.head()用法例子
- Perl-列表和数组2
- 信息安全三要素(CIA):
- Qt5.9最简单的画五角星
- Python的异步编程介绍
- IntelliJ IDEA—SVN的配置及使用
- 高速缓存DNS解析详解
- Uniapp-微信小程序实现全局事件监听并进行数据埋点