jjzjj

【蓝桥杯】每日四道填空题(两道真题+两道模拟题)| 第四天

能敌八个的攻城狮 2025-01-03 原文

专栏: 蓝桥杯——每日四道填空题(两道真题+两道模拟题)
&离蓝桥杯已经不到一个月时间了,赶快刷起来吧,填空题一定别丢分!!
꒰•̀ᴗ•́꒱
另一个专栏是: 蓝桥杯——编程题刷题营(每日四题,两道模拟,两道真题)

目录

第一道真题(2016年省赛):寒假作业 | 答案:64

第二道真题(2019年省赛):质数  | 答案:17569

第三道模拟题(2022年第二次模拟赛): 拆分质数个数 |答案:33

第四道模拟题():答案:10


第一道真题(2016年省赛):寒假作业 | 答案:64

题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

现在小学的数学题目也不是那么好玩的。 看看这个寒假作业:

  

   □ + □ = □
   □ - □ = □
   □ × □ = □
   □ ÷ □ = □

每个方块代表 1~13 中的某一个数字,但不能重复。

比如:

 6  + 7 = 13
 9  - 8 = 1
 3  * 4 = 12
 10 / 2 = 5

以及:

 7  + 6 = 13
 9  - 8 = 1
 3  * 4 = 12
 10 / 2 = 5

就算两种解法。(加法,乘法交换律后算不同的方案

你一共找到了多少种方案?

运行限制
最大运行时间:1s
最大运行内存: 128M

怎么说呢,dfs 应该是我首选,毕竟是填空题。

但是这题要注意,除法  ' / ' c++是整除的,但实际上3 / 2   !=  1,是1.5。

#include<iostream>
using namespace std;
int b[20] , t = 13 ;  //b[]存储每次选中的值, 
long long ans=0;
bool used[20]; //选中的,要排除掉,避免重复使用。
void dfs(int s){
  if(s==13){ //已经到了最后一个数了,说明已经选择好了一种方案。
          ans++;
          return;
      }
  if(s==3 && b[0]+b[1]!=b[2]) return;  //加法已经选入后,看是否满足条件
  if(s==6 && b[3]-b[4]!=b[5]) return;
  if(s==9 && b[6]*b[7]!=b[8]) return;
  if(s==12 && (double)b[9] / b[10] != b[11]) return; //注意转成浮点数计算,才是真真的除法。
  for(int i=0;i<t;i++){  
      if(!used[i]){
      used[i]=true;
      b[s]=i+1; //选中的值属于[1 , 13]
      dfs(s+1);
      used[i]=false;}
  }
}
int main(){
    dfs(0); //从第一个空开始依次填数
    cout<<ans<<endl;
    return 0;
}

这题如果数学好,可以仔细手数,因为数据也不是很大。

# 6  + 7 = 13 变形:7+6=13  13-7=6  13-6=7
# 9  - 8 = 1  变形:9-1=8   1+8=9   8+1=9
# 3  * 4 = 12 变形:4*3=12  12/4=3  12/3=4
# 10 / 2 = 5  变形:10/5=2  2*5=10  5*2=10

# 加法:6+7=13  7+6=13 1+8=9   8+1=9
# 减法:9-8=1   9-1=8  13-7=6  13-6=7
# 乘法:3*4=12  4*3=12 2*5=10  5*2=10
# 除法:10/2=5  10/5=2 12/4=3  12/3=4

# 6,7,13 组合:2*2*4*2 = 32
# 1,8,9 组合:同上
#所以:
printf("64");

第二道真题(2019年省赛):质数  | 答案:17569

 找了一道真题,复习一下质数的判断。

质数:只能被1和自身整除的数。

首先是最容易理解的方法(耗时):

#include <iostream>
using namespace std;
int main()
{
  int num=3;//前三个为2,3,5
  for (int i = 6 ; ; i++){//从6开始判断
    int flag = 1;
    for (int j = 2 ; j < i ; j++){
      if (i%j == 0){
        flag = 0;
        break;
      }
    }  
    if (flag == 1){
      num ++;
    }
    if(num == 2019){
      cout<<i<<endl;
      break;
    }
  }
  return 0;
}

优化:孪生素数法(高效)

当然这里只是一道填空题,但是如果是编程题,还是有必要掌握这个方法的。

#include<iostream>
#include<cmath>
using namespace std;
bool is_prime(int num)
{
    if (num == 2 || num == 3)
        return true;
    if (num % 6 != 1 && num % 6 != 5)  //不在6的倍数的两侧一定不是素数
        return false;
    for (int i = 5; i <= sqrt(num); i += 6) 
        if (num % i == 0 || num % (i + 2) == 0)//在6的倍数两侧并不是一定就是质数,还要特判一下哦 
            return false;
    return true;
} 
int main()
{
    int i = 2; //素数
    int cnt = 0; //数量 
    while(true)
    {
        if(is_prime(i))
        {
            cnt++;
        }
        if(cnt == 2019)
        {
            break;
        }
        i++;
    }
    cout << i << endl;
    return 0;
}

第三道模拟题(2022年第二次模拟赛): 拆分质数个数 |答案:33

问题描述:

将2022拆分成不同的质数的和,请问最多拆分成几个?

 这里我特地找了一道 dfs + 质数判断 的题,练一下吧!

#include <bits/stdc++.h>
using namespace std;
 
vector<int> primes;
int mp[2023][2023] ; 
//为了记录下这条路径后面的“子节点”数量, 如果再次递归到这个父节点就直接返回它后面路径的“子节点个数” 
// 不写这个也可以,只是比较浪费时间 ,这样可以节约时间,学到了吗,哈哈! 
 
//bool is_prime(int x) {
//    for (int i = 2; i * i <= x; i ++) {
//        if (x % i == 0) return false;
//    }
//    return true;
//}
//或者:
bool is_prime(int num)
{
    if (num == 2 || num == 3)
        return true;
    if (num % 6 != 1 && num % 6 != 5)  //不在6的倍数的两侧一定不是素数
        return false;
    for (int i = 5; i <= sqrt(num); i += 6) 
        if (num % i == 0 || num % (i + 2) == 0)//在6的倍数两侧并不是一定就是质数,还要特判一下哦 
            return false;
    return true;
} 
 
int dfs(int cur, int idx) {
	int mx = 0;
    if (cur == 0) return 0;
    if (cur < primes[idx]) return -1;
    if (mp[cur][idx] != 0)  return mp[cur][idx];  //如果这条路径已经查询了,直接返回这条路径 上的节点数目 
    for (int i = idx; i < primes.size() && cur >= primes[i]; i ++) {
        mx = max(mx, 1 + dfs(cur - primes[i], i + 1));
    }
     mp[cur][idx] = mx;  //注意一定要在已经这里才记录下这条路径的子节点数目,因为这条路径不满足上面条件代码才走到这的,
	 //说明这条路径已经明确了。 
     return mx;
}
 
int main() {
    for (int i = 2; i <= 2022; i ++) {
        if (is_prime(i)) primes.push_back(i);
    }
    cout << dfs(2022, 0) << endl;
 
    return 0;
}

第四道模拟题(2022年第四次模拟赛):答案:10

 贪心思想,每次都尽可能令左子树比右子树多 1 个节点(反之也可),注意根节点是第0层。

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

int main() {
	int cnt = 2021, d = 0;
	while (cnt != 1) {
		cnt--;
		cnt = cnt / 2 + (cnt % 2);
		d++;
	}
	cout << d << endl;
	return 0;
}

当然也可以找规律,这是也是我们平时做题重要的思想,毕竟用代码写,和用笔算是两码事。

比如结点数为6,我们画图知道它应该是2层,当结点数是11时,它应该是3层。

你可以大胆的猜测, <= 6 <= ;  <= 11 <= 

发现,层数和结点数满足上述关系,那么接下来就用一个循环来查找就OK了。

#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
	for (int i = 0 ; i <= 31 ; ++i)
	{
		if(pow(2 , i) <= 2021 && pow(2 , i + 1) >= 2021){
			cout<<i<<endl;
			break;
		}
	}
	return 0;
} 

有关【蓝桥杯】每日四道填空题(两道真题+两道模拟题)| 第四天的更多相关文章

  1. ruby - 如何模拟 Net::HTTP::Post? - 2

    是的,我知道最好使用webmock,但我想知道如何在RSpec中模拟此方法:defmethod_to_testurl=URI.parseurireq=Net::HTTP::Post.newurl.pathres=Net::HTTP.start(url.host,url.port)do|http|http.requestreq,foo:1endresend这是RSpec:let(:uri){'http://example.com'}specify'HTTPcall'dohttp=mock:httpNet::HTTP.stub!(:start).and_yieldhttphttp.shou

  2. ruby-on-rails - 在这种情况下我如何模拟一个对象?没有明显的方法可以用模拟替换对象 - 2

    假设我在Store的模型中有这个非常简单的方法:defgeocode_addressloc=Store.geocode(address)self.lat=loc.latself.lng=loc.lngend如果我想编写一些不受地理编码服务影响的测试脚本,这些脚本可能已关闭、有限制或取决于我的互联网连接,我该如何模拟地理编码服务?如果我可以将地理编码对象传递到该方法中,那将很容易,但我不知道在这种情况下该怎么做。谢谢!特里斯坦 最佳答案 使用内置模拟和stub的rspecs,你可以做这样的事情:setupdo@subject=MyCl

  3. ruby - "public/protected/private"方法是如何实现的,我该如何模拟它? - 2

    在ruby中,你可以这样做:classThingpublicdeff1puts"f1"endprivatedeff2puts"f2"endpublicdeff3puts"f3"endprivatedeff4puts"f4"endend现在f1和f3是公共(public)的,f2和f4是私有(private)的。内部发生了什么,允许您调用一个类方法,然后更改方法定义?我怎样才能实现相同的功能(表面上是创建我自己的java之类的注释)例如...classThingfundeff1puts"hey"endnotfundeff2puts"hey"endendfun和notfun将更改以下函数定

  4. ruby - 在 RSpec 中 stub /模拟全局常量 - 2

    我有一个gem,它有一个根据Rails.env的不同行为的方法:defself.envifdefined?(Rails)Rails.envelsif...现在我想编写一个规范来测试这个代码路径。目前我是这样做的:Kernel.const_set(:Rails,nil)Rails.should_receive(:env).and_return('production')...没关系,只是感觉很丑。另一种方法是在spec_helper中声明:moduleRails;end而且效果也很好。但也许有更好的方法?理想情况下,这应该有效:rails=double('Rails')rails.sho

  5. ruby-on-rails - rspec 模拟对象属性赋值 - 2

    我有一个rspec模拟对象,一个值赋给了属性。我正在努力在我的rspec测试中满足这种期望。只是想知道语法是什么?代码:defcreate@new_campaign=AdCampaign.new(params[:new_campaign])@new_campaign.creationDate="#{Time.now.year}/#{Time.now.mon}/#{Time.now.day}"if@new_campaign.saveflash[:status]="Success"elseflash[:status]="Failed"endend测试it"shouldabletocreat

  6. ruby - 如何使用 rspec stub /模拟对命令行的调用? - 2

    我正在尝试测试命令行工具的输出。如何使用rspec来“伪造”命令行调用?执行以下操作不起作用:it"shouldcallthecommandlineandreturn'text'"do@p=Pig.new@p.should_receive(:run).with('my_command_line_tool_call').and_return('resulttext')end如何创建stub? 最佳答案 使用newmessageexpectationsyntax:规范/虚拟规范.rbrequire"dummy"describeDummy

  7. 华为OD机试真题 C++ 实现【带传送阵的矩阵游离】【2023 Q2 | 200分】 - 2

            所有题目均有五种语言实现。C实现目录、C++实现目录、Python实现目录、Java实现目录、JavaScript实现目录题目n行m列的矩阵,每个位置上有一个元素你可以上下左右行走,代价是前后两个位置元素值差的绝对值.另外,你最多可以使用一次传送阵(只能从一个数跳到另外一个相同的数)求从走上角走到右下角最少需要多少时间。输入描述:第一行两个整数n,m,分别代表矩阵的行和列。后面n行,每行m个整数,分别代表矩阵中的元素。输出描述:一个整数,表示最少需要多少时间。

  8. 蓝桥杯备赛(二) - 2

    目录前言: 一、ASC分析代码实现二、 卡片分析代码实现三、 直线分析代码实现四、货物摆放分析代码实现小结:前言:  在刷题的过程中,发现蓝桥杯的题目和力扣的差别很大。让人有一种不一样的感觉,蓝桥杯题目偏向对于实际问题用编程去的解决,而力扣给人感觉很锻炼自己的编程思维,逻辑能力。两者结合去刷,相信会有不一样的收获。 一、ASC  已知大写字母A的ASCII码为65,请问大写字母L的ASCII码是多少?分析  这道题目看上去很简单,我们需确定自己计算的准确,所以我建议用编程去解决。代码实现publicclassTest8{publicstaticvoidmain(String[]args){Sy

  9. ruby - 接收 block 作为参数的模拟方法 - 2

    我有一个或多或少这样的场景classAdefinitialize(&block)b=B.new(&block)endend我正在对A类进行单元测试,我想知道B#new是否正在接收传递给A#new的block。我使用Mocha作为模拟框架。这可能吗? 最佳答案 我用Mocha和RSpec都试过了,虽然我可以通过测试,但行为不正确。从我的实验中,我得出结论,验证block是否已通过是不可能的。问题:为什么要传递一个block作为参数?block将用于什么目的?什么时候调用?也许这确实是您应该用类似的东西测试的行为:classBlockP

  10. ruby - 如何模拟 Fixnum 变量的整数溢出? - 2

    我目前正在将一种算法从Java转换为Ruby,但由于Ruby中缺少整数溢出,我遇到了一些障碍。假设我的值为2663860877,它大于最大整数2147483648。在Java中,它环绕,我应该得到-1631106419。我找到了这段代码,但它似乎不起作用:defforce_overflow(i)ifi2147483647i&0xffffffffelseiendend并且'ing变量不会像您期望的那样强制它为负。 最佳答案 假设32位整数具有二进制补码负数,这应该可行:defforce_overflow_signed(i)force_

随机推荐