当前位置: 首页 > article >正文

蓝桥杯-24点-搜索

题目

思路

--暴力递归全组合的方法。只有4个数,4种计算方式,共有4 * 3 * 2 * 1 * 4种不同的情况,可以写递归来实现。

--每次计算都是两个数之间的运算,因此4个数需要3次计算,第一次计算前有4个数,第二次有3个数,第三次有两个数,那么怎么在数组长度恒为4时,将每次计算需要使用的数字个数减少呢,就可以将a[0]来记录n个数的最后一个数的值,让前面n个数始终为有效数字。

代码

#include <iostream>
#include <vector>
#include <cmath>
using namespace std;

int a[4];
int maxr;

void dg(int n){
    if (n == 1){
        if (a[0] <= 24){
            maxr = max(maxr, a[0]);
        }
        return;
    }
    else{
        for (int i = 0; i < n - i; i++){
            for (int j = i + 1; j < n; j++){ //双重循环,正好是4 * 3 * 2 * 1种可能。 
                int b1 = a[i];
                int b2 = a[j]; //找a[i]和a[j]的替身。 
                
                a[j] = b1 + b2;
                a[i] = a[n - 1]; //将a[i]和最后一个数替换,使得有效数字逐渐减少,非常巧妙的方法。 
                dg(n - 1);
                a[j] = b1 - b2;
                a[i] = a[n - 1]; //每个递归的前面都要重新确定a[i]的值,上一次递归结束后,a[i]的值很可能改变。 
                dg(n - 1);
                a[j] = b2 - b1;
                a[i] = a[n - 1];
                dg(n - 1);
                a[j] = b1 * b2;
                a[i] = a[n - 1];
                dg(n - 1);
                if (b2 != 0 && b1 % b2 == 0){ //除数不能为0! 
                    a[j] = b1 / b2;
                    dg(n - 1);
                }
                if (b1 != 0 && b2 % b1 == 0){
                    a[j] = b2 / b1;
                    dg(n - 1);
                }
                
                a[i] = b1;
                a[j] = b2;
            }
        }
    }
}
int main(){
    int n;
    cin >> n;
    for (int i = 0; i < n; i++){
        maxr = 0; //每次循环,都要将其定为0,否则以后输出的都是最大值 
        for (int j = 0; j < 4; j++){
            cin >> a[j];
        }
        dg(4);
        cout << maxr << endl;
    }
    
    return 0;
}


http://www.kler.cn/a/273906.html

相关文章:

  • [Git] git cherry-pick
  • JS进阶--JS听到了不灭的回响
  • Spring Boot教程之四十九:Spring Boot – MongoRepository 示例
  • 左神算法基础巩固--3
  • STM32烧写失败之Contents mismatch at: 0800005CH (Flash=FFH Required=29H) !
  • 审计表UNIFIED_AUDIT_TRAIL出现YAS-00220 utf8 sequence is wrong
  • 前端模块化开发
  • QT6实现创建与操作sqlite数据库(一)
  • 【ZooKeeper】1、基本介绍
  • 计算机网络的组成
  • Linux下安装多个nodejs并映射Jenkins
  • 【HTTP】面试题整理
  • 5.1.7.1、【AI技术新纪元:Spring AI解码】Mistral AI函数调用
  • PHP反序列化--_wakeup()绕过
  • 蓝桥杯刷题(十一)
  • 面试算法-52-对称二叉树
  • C语言 实用调试技巧
  • python循环结构
  • 面试经典150题(114-118)
  • Java后端八股----JVM篇
  • python入门(二)
  • jQuery+CSS3自动轮播焦点图特效源码
  • c++ 正则表达式处理语言文本,根据标点符号分割句子
  • Java编程——赌数游戏
  • 使用 CSS 实现毛玻璃效果
  • centos防火墙firewall-cmd限定特定的ip访问