Project Euler problem 38

本文介绍了一种通过编程方法寻找特定数字组合的算法。该算法旨在找出一个五位数与其两倍数相接形成九位数的情况,并且这个九位数包含从1到9的所有数字各一次。文章详细阐述了实现这一目标的步骤和技术细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这题主要看观察能力

他要找最大的。

就得比题目给的那个要大

给的是9开头的。

所以呢。要找的肯定也是9开头的。

首先看90几行不,乘1乘2乘3后发现位数不能到9位

再看900多

再看9000多

发现9000多有可能行

乘以2后是5位数

然后凑一块就是个9位数


然后枚举9000多就行了


#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <stack>
#include <cmath>
#include <map>
#include <ctime>
#define MAXN 111111
#define INF 100000007
using namespace std;
int v[11];
bool isok()
{
    if(v[0]) return 0;
    for(int i = 1; i <= 9; i++)
        if(v[i] != 1) return 0;
    return 1;
}
int main()
{
    for(int i = 9876; i >= 9123; i--)
    {
        memset(v, 0, sizeof(v));
        int ti = i;
        while(ti)
        {
            v[ti % 10]++;
            ti /= 10;
        }
        ti = i * 2;
        while(ti)
        {
            v[ti % 10]++;
            ti /= 10;
        }
        if(isok())
        {
            printf("%d%d\n", i, i * 2);
            break;
        }
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值