竞码编程-蓝桥杯校内选拔赛(决赛)重现赛 OI赛制 赛后试题自制详解(C/C++)

本文详细解读了蓝桥杯竞赛中关于好运数的定义和信息加密的解题思路,提供了解题策略及代码实现,涵盖了从质因子个数统计到字符替换的加密解密过程。
摘要由CSDN通过智能技术生成

竞码编程-蓝桥杯校内选拔赛(决赛)重现赛 OI赛制 赛后试题自制详解(C/C++)


*最后几道太难了,能力有限,搬运大佬的
仅供备考学习使用,未进行任何商业活动~~~~~~*

**

A. 试题A:好运2020 8’
描述
JM同学2020想要行大运,所以他想知道,[1,2020]的数中有多少个好运数。对于好运数的定义为:如果x的不同质因子个数不等于4,则被认为是一个好运数。
例如:
数字4,其不同的质因子个数只有2,共1个,是一个好运数。
数字210,其不同的质因子分别是
2,3,5,7,共4个,则不是一个好运数。
请你帮JM同学计算一下,[1,2020]区间有多少个好运数,并提交答案。
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个数字,填写多余的内容将无法得分。**

题解:
枚举[1,2000]中每一个数,逐一找出其不同质因子的个数。
质数判断题库P1020
答案:1937
代码实现:

#include <bits/stdc++.h>
using namespace std;

#define rep(i,l,r) for(int i=l;i<=r;i++)
int ans=0;
int sieve(int x){
   
  int res=0;
  rep(i,2,x){
   
    if(x%i==0){
   
      res++;
      while(x%i==0)x/=i;
    }
  }
  return res;
}
int main() {
   
  rep(i,1,2020){
   
    if(sieve(i)!=4)ans++;
  }
  cout<<ans;
}

B. 试题B:信息加密 8’
描述
古罗马时期,在大规模的战争中,部队之间常常需要信使往来,传递重要的军事情报。可是,一旦信使被敌军 抓获,重要的军事情报就完全暴露给了敌方。甚至,狡猾的敌人有可能篡改军事情报,并收买信使把假情报传递给我方部队。这样一来,我方部队就完全落入到了敌方的陷阱之中。
怎样防止这种情况的发
生呢?不让信使被敌人抓获?这个肯定是无
法绝对避免的。那么我们不妨换个角度,让敌人即使截获了军事情报,也看不懂里面的内容,这就是对信息的加密。
我们不妨这样来做这样的定义明文" ABCDEFGHIJKLMNOPQRSTUVWXYZ"其密文
是"JKLMNOPQRSTUVWXYZABCDEFGHI"。
请在给你一段密文请你通
我们使用的解密算法对密文进行解密

输入
第一行输入密文s(仅包含大写字母)
输出
输出对应明文
样例
输入
复制
ABC
输出
复制
RST
提示
数据规模
对于50%的数据,输入只包含A,B,C,D四种字母
对于100%的数据,
1 ≤len(s)≤10^5

题解:
每一个字母对应一个输出字母.
不会for循环遍历查找的同学,可以直接用组数自己预处理出每一个字母对应的输出字母
代码实现:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define I inline
#define ri register int
#define For(i , x , y) for(ri i = x ; i <= y ; ++ i)
#define Next(i , x) for(ri i = head[x] ; i ; i = e[i].nxt)
I int read() {
   
	int s = 0 , w = 1; char ch = getchar();
	while(ch < 48 || ch > 57) {
   if(ch == '-') w = -1; ch = getchar();}
	while(ch >= 48 && ch <= 57) s = (s << 1) + (s << 3) + (ch ^ 48) , ch = getchar();
	return s * w;
}
const int N = 105;
string a , s = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" , t = "JKLMNOPQRSTUVWXYZABCDEFGHI";
char ans[N];

signed main() {
   
	cin >> a;
	For(i , 0 , 25) ans[t[i]] = s[i];
	int len = a.length() - 1;
	For(i , 0 , len) printf("%c" , ans[a[i]]) ; putchar('\n');
	return 0;
}

C. 试题C:方圆 14’
描述
在这里插入图片描述
在这里插入图片描述
题解:
在这里插入图片描述
代码实现:

#include <iostream>
#include <cstring>
#include <map>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <queue>
#include <set>

using namespace std;

int x, y, r;
int px, py, w, h;

int main(){
   
    while(~scanf("%d%d%d", &x, &y, &r)){
   
        scanf("%d%d%d%d", &px, &py, &w, &h);

        int lx = px, rx = px + w;
        int ly = py, ry = py + h;

        //lx
        double temp = sqrt(pow(r, 2) - pow(lx - x, 2));
        if(temp >= 0){
   
            double temp_y = y + temp;
            if(ly <= temp_y && temp_y <= ry){
   
                puts("yes");
                continue;
            }

            temp_y = y - temp;
            if(ly <= temp_y && temp_y <= ry){
   
                puts("yes");
                continue;
            }
        }

        //rx
        temp = sqrt(pow(r, 2) - pow(rx - x, 2));
        if(temp >= 0){
   
            double temp_y = y + temp;

            if(ly <= temp_y && temp_y <= ry){
   
                puts("yes");
                continue;
            }

            temp_y = y - temp;
            if(ly <= temp_y && temp_y <= ry){
   
                puts("yes");
                continue;
            }
        }

        //ly
        temp = sqrt(pow(r, 2) - pow(ly - y, 2));
        if(temp >= 0){
   
            double temp_x = x + temp;
            if(lx <= temp_x && temp_x <= rx){
   
                puts("yes");
                continue;
            }

            temp_x = x - temp;
            if(lx <= temp_x && temp_x <= rx){
   
                puts("yes");
                continue;
            }
        }

        //ry
        temp = sqrt(pow(r, 2
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值