0


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>usingnamespace std;int n, m;int now =1, t =0;boolisPrime(int x){if(x <=1){returnfalse;}if(x ==2){returntrue;}for(int i =2; i * i <= x; i++){if(x % i ==0){returnfalse;}}returntrue;}intmain(){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);return0;}
标签: 算法 c++ 开发语言

本文转载自: https://blog.csdn.net/joe_g12345/article/details/136285478
版权归原作者 AICodeThunder 所有, 如有侵权,请联系我们删除。

“C++知识点总结(22):模拟算法真题 ★★★☆☆《安全警报》”的评论:

还没有评论