数字迷宫 暴力

该篇文章描述了一种在给定范围内寻找不含2或4的三个正整数的算法,通过双重循环枚举并检查每组数,计算满足条件的组合数,最后除以排列数6得到答案。
摘要由CSDN通过智能技术生成

//由于n的范围是1e4,O(n^2)的规模只有1e8,限时2s,故本题直接暴力求解即可 
#include <bits/stdc++.h>

using namespace std;

bool check(int x)//验证x的各位是否含2或4 
{
    while(x)//拆分x的各位 
    {
        if(x%10==2||x%10==4)return false;//有2或4则返回false 
        x=x/10;
    }    
    return true;//否则返回true 
}

int main()
{
    int n;
    cin>>n;
    int ans=0;
    for(int i=1;i<=n;i++)//枚举第一个正整数i 
    {
        if(check(i)==false)continue;//含2或4,返回 
        for(int j=1;j<=n;j++)//枚举第二个正整数j 
        {
            if(j==i||check(j)==false)continue;//j等于i,或j含2和4,返回 
            int k=n-i-j;//由i和j直接算出第三个数k 
            if(check(k)==false||k==i||k==j||k<=0)continue;//同理验证k 
            ans++;//均满足要求,计数值加1 
        }
    }
    //注意本题规定调换3个数的顺序仍算作一种答案
    //若一种答案为5 6 7,则以上算法将5 6 7的所有排列均计入其中
    //3个数的排列数是A(3,3)=6,故计数值除以6即为最终答案 
    cout<<ans/6<<endl;
    return 0;
}

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值