(枚举)算法竞赛入门经典(7.1.1)除法

本文介绍了一个使用递归算法寻找特定数字组合的问题,该组合在乘法运算后的结果需满足一定的位数要求且不重复使用数字。代码中利用了C++的特性,通过递归调用实现了对所有可能的数字组合进行遍历,并检查是否符合要求。

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

#include<cstdio>
#include<cstdlib>
#include<iostream>
using namespace std;
int n{},
    arr[10]{};
void cck(int p,bool *flag)
{
    int sum=p*n,
        ans=p*n,
        hd=9;
    if(sum>98765||sum<1234)
        return;
    if(!(sum/10000))hd--;
    bool flag2[10];
    for(int i=0;i<10;i++)flag2[i]=flag[i];
    for(int i=hd;i>=5;i--){
        arr[i]=sum%10;
        sum/=10;
        if(flag2[arr[i]])return;
        flag2[arr[i]]=1;
    }
    printf("%d/%d=%d\n",ans,p,n);
}
void recursion(int p,int row,bool *flag)
{
    if(row==5){
        cck(p,flag);
        return;
    }
    for(int i=0;i<10;i++){
        if(!flag[i]){
            arr[4-row]=i;
            flag[i]=1;
            recursion(p*10+i,row+1,flag);
            flag[i]=0;
        }
    }
}
int main()
{
    bool flag[10]{};
    scanf("%d",&n);
    recursion(0,0,flag);
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值