除法(Divsion ,Uva 725)(算法竞赛与入门经典第2版)

题目:

https://www.luogu.com.cn/problem/UVA725(题目来源)

题目思路:
直接枚举fghij就行了,因为abcde可以用fghij*n来进行表示,就不用对0-9的所有排列进行枚举,降低了枚举量;当abcde或者fghij超过5位就可以结束; (输入和输出的要求我就不过多写了)

代码:

#include<bits/stdc++.h>
using namespace std;
bool jude(string temp){ //jude函数判断a~j为数字0~9的排列 
        for(int i=0;i<9;i++) {
                if(temp[i]+1!=temp[i+1]){  // 判断是否为递增数 
                        return false;   //不是就false 
                }        
        }
        return true;
}
int main(){
        int n;
        cin>>n;
        int fghij=1000,abcde;
        while(fghij<100000){
                abcde=fghij*n;    //abcde/fghij=n; 
                string a,b;
                if(abcde>100000) break; //abcde超过5位结束枚举 
                b=to_string(abcde);
                if(fghij<10000) a="0"+to_string(fghij);  //fghij为4位的时候,意味着枚举前导零(0xxxx);
                string c=a+b;     //得到a和b的组合 
                sort(c.begin(),c.end());  //对c排序得到“0123456789 ” 
                if(jude(c)) cout<<b<<"/"<<a<<"="<<n<<endl;  //打印结果 
                fghij++;   
        }
        return 0;
}

输出结果:

(如果有疑问或者不对的地方,欢迎大家讨论 )

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值