本文主要是介绍C++知识点总结(22):模拟算法真题 ★★★☆☆《安全警报》,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
安全警报
1. 审题
题目描述
Z市最大的金融公司:太平洋金融遭到了入侵,一名黑客潜入到了公司中,公司紧急启动安保程序,将大楼封锁,并安排作为安全主管的你对楼层进行搜查。所以你准备写一个程序,输入搜查楼层的顺序,寻找最有可能出现黑客的楼层。已知:
1、搜索一层楼,需要花费 11 11 11 秒
2、电梯每上一层楼,需要花费 7 7 7 秒
3、电梯每下一层楼,需要花费 5 5 5 秒
4、电梯初始在 1 1 1 楼
5、黑客躲在搜查总时间为质数的楼层
请你设计一个程序,输入楼层数以及巡楼的顺序,输出最容易出现黑客的楼层。
输入描述
输入文件:
safe.in
共 2 2 2 行:
第 1 1 1 行包含 1 1 1 个整数 n n n,代表楼层数。
第 2 2 2 行包含 n n n 个整数,代表巡楼的顺序,楼层不会重复巡。
输入的数据保证一定有解。
输出描述
输出文件:
safe.out
共 1 1 1 行,包含若干个整数,代表最容易出现黑客的楼层,每两个楼层之间使用空格隔开若有多个,按输入顺序输出即可。
样例1
输入
3 1 3 2
输出
1
提示
对于 30 % 30\% 30% 的数据, 2 ≤ n ≤ 30 2 \le n \le 30 2≤n≤30。
对于 100 % 100\% 100% 的数据, 2 ≤ n ≤ 200 2 \le n \le 200 2≤n≤200。
2. 思路
边输入边操作
- 读入楼层数 n n n 和巡楼的顺序。
- 按照读入的巡楼顺序,遍历楼层并存储时间。
- 每到一层楼,都判断一下所用的时间是不是质数,如果是则输出该楼层。
3. 参考答案
#include <iostream>
#include <cstdio>
using namespace std;int n, m;
int now = 1, t = 0;bool isPrime(int x)
{if (x <= 1){return false;}if (x == 2){return true;}for (int i = 2; i * i <= x; i++){if (x % i == 0){return false;}}return true;
}int main()
{freopen("safe.in", "r", stdin);freopen("safe.out", "w", stdout);// 输入数据cin >> n;for (int i = 1; i <= n; i++){cin >> m;// 时间增加if (m > now){t += (m-now) * 7;}else{t += (now-m) * 5;}t += 11;if (isPrime(t)){cout << m << " ";}now = m;}fclose(stdin);fclose(stdout);return 0;
}
这篇关于C++知识点总结(22):模拟算法真题 ★★★☆☆《安全警报》的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!