//由于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;
}
数字迷宫 暴力
最新推荐文章于 2024-10-08 15:59:24 发布
该篇文章描述了一种在给定范围内寻找不含2或4的三个正整数的算法,通过双重循环枚举并检查每组数,计算满足条件的组合数,最后除以排列数6得到答案。
摘要由CSDN通过智能技术生成