C++牛客网编程

整数的约数个数

输入n个整数,依次输出每个数的约数的个数
输入描述:
输入的第一行为N,即数组的个数(N<=1000) 接下来的1行包括N个整数,其中每个数的范围为(1<=Num<=1000000000)
输出描述:
可能有多组输入数据,对于每组输入数据, 输出N行,其中每一行对应上面的一个数的约数的个数。

#include <iostream>
using namespace std;

int numAdd(int num) {
   
	int ans = 0;
	int i;
	for (i = 1; i*i < num; i++) {
   
		if (num%i == 0)
			ans += 2;
	}
	if (i*i == num) ans++;
	return ans;
}

int main() {
   
	int n, num;
	while (cin >> n) {
   
		for (int i = 0; i < n; i++) {
   
			cin >> num;
			cout << numAdd(num) << endl;
		}
	}
	return 0;

}

重点:

  1. 约数即因数
  2. 约数可通过求到根号n的地方,小于根号n的加2(因为a*b=n),等于根号n的加1
  3. 不用开那么大的数组,输入一个数输出一个值就可以了

代理服务器访问服务器

使用代理服务器能够在一定程度上隐藏客户端信息,从而保护用户在互联网上的隐私。我们知道n个代理服务器的IP地址,现在要用它们去访问m个服务器。这 m 个服务器的 IP 地址和访问顺序也已经给出。系统在同一时刻只能使用一个代理服务器,并要求不能用代理服务器去访问和它 IP地址相同的服务器(不然客户端信息很有可能就会被泄露)。在这样的条件下,找到一种使用代理服务器的方案,使得代理服务器切换的次数尽可能得少。

输入描述:
每个测试数据包括 n + m + 2 行。 第 1 行只包含一个整数 n,表示代理服务器的个数。 第 2行至第n + 1行每行是一个字符串,表示代理服务器的 IP地址。这n个 IP地址两两不相同。 第 n + 2 行只包含一个整数 m,表示要访问的服务器的个数。 第 n + 3 行至第 n + m + 2 行每行是一个字符串,表示要访问的服务器的 IP 地址,按照访问的顺序给出。 每个字符串都是合法的IP地址,形式为“xxx.yyy.zzz.www”,其中任何一部分均是0–255之间的整数。输入数据的任何一行都不包含空格字符。 其中,1<=n<=1000,1<=m<=5000。
输出描述:
可能有多组测试数据,对于每组输入数据, 输出数据只有一行,包含一个整数s,表示按照要求访问服务器的过程中切换代理服务器的最少次数。第一次使用的代理服务器不计入切换次数中。若没有符合要求的安排方式,则输出-1。

思路:
首先读入所有的代理服务器,用map<string, bool>存储,代理地址到可否使用的映射关系。然后依次读入需要访问的服务器,读入一个地址后判断是否存在在代理服务中,如果存在,将该地址的代理使用权限标记为false,并判断是否全部的代理都标记false,如果全部都被标记false,那说明,这是离上次变更最远的了,必须进行变更代理服务器了,然后重置代理map,并标记当前的代理为false。
有个测试点需要输出-1,我就直接针对这个点进行了判断,可能还有更好的判断条件,期待回复。(PS:我的判断是代理数量为1,但需要访问它本身)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值