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

洛谷刷题 P1008 [NOIP1998 普及组] 三连击

题目链接:P1008 [NOIP1998 普及组] 三连击

思路

此题主要采取枚举的思想,但是直接暴力枚举会导致时间不够,因此我们先进行分析

因为要求三个三位数构成的比例是1:2:3,因此最小的那个数的百位只能在1、2、3选择,这样大大缩小了枚举范围,因此我们可以通过对最小数字的枚举

AC代码

#include<iostream>
using namespace std;

bool check(int a, int b, int c)
{
    if (b >= 1000 || c >= 1000) return false;
    bool list[10]={0}; // 记录数字是否被使用
    // 分别对a,b,c的各位数字进行记录
    for (int i = 0; i < 3; i++) 
    {
        list[a%10] = 1;
        a /= 10;
    }
    for (int i = 0; i < 3; i++)
    {   
        if (list[b%10]) return false; // 判断是否有重复数字
        list[b%10] = 1;
        b /= 10;
    }
    for (int i = 0; i < 3; i++)
    {
        if (list[c%10]) return false; // 判断是否有重复数字
        list[c%10] = 1;
        c /= 10;    
    }
    if (list[0]) return false; // 判断是否有0
    return true;
}
int main()
{
    for (int i = 1; i <= 3; i++) // 确定最小数的百位
    {
        int a = i*100;
        for (int j = 1; j < 10; j++) // 确定最小数十位
        {
            if ( i == j ) 
            {
                continue;
            }
            a += j*10;
            for (int k = 1; k < 10; k++) // 确定最小数个位
            {
                if ( i == k || j == k ) 
                {
                    continue;
                }
                a += k;
                if (check(a, a*2, a*3)) // 判断是否满足条件
                {
                    cout << a << " " << a*2 << " " << a*3 << endl;
                }
                a -= k; // 回溯
            }
            a -= j*10; // 回溯
        }
    }
    return 0;
}

http://www.kler.cn/news/359999.html

相关文章:

  • 深入剖析CAS:无锁并发编程的核心机制与实际应用
  • MySQL 的系统函数
  • 快速了解Python流程控制语句基本使用
  • 【C++】在Windows中使用Boost库——实现TCP、UDP通信
  • Moectf-week1-wp
  • ENSP环回路由的配置
  • 深度学习基础—神经风格迁移
  • PCL 基于中值距离的点云对应关系(永久免费版)
  • 我常用的两个单例模式写法 (继承Mono和不继承Mono的)
  • 通过SSH远端免密登录执行脚本,修改最新5分钟生成文件权限
  • 离散数学 第二讲 特殊集合和集合间关系 笔记 [电子科大]王丽杰
  • uniapp 常用的地区行业各种多选多选,支持回显,复制粘贴可使用
  • 使用HIP和OpenMP卸载的Jacobi求解器
  • Netty笔记
  • 【论文学习与撰写】,论文word文档中出现乱码的情况,文档中显示的乱码,都是英文字母之类的,但打印预览是正常的
  • Flutter 11 Android原生项目集成Flutter Module
  • 判断索引对象中所有元素是否都为真值pandas.Index.all()
  • 【DBA Part01】国产Linux上安装Oracle进行数据迁移
  • opencv 图像缩放操作 - python 实现
  • 【STM32 HAL库】MPU6050姿态解算 卡尔曼滤波