枚举(3)

来源:互联网 发布:ubuntu安装步骤 编辑:程序博客网 时间:2024/06/18 03:45

3.现有一密码箱,由五位数构成,格式如下:

     要求如下:

(1)百位数上为1;

(2)能同时被81和91整除;

方法一:传统方法比较麻烦

#include <iostream>using namespace std;int main(){int i,j,m,n;for(i=0;i<10;i++)for(j=0;j<10;j++)for(m=0;m<10;m++)for(n=0;n<10;n++){             if((i+10*j+100+m*1000+n*10000)%(81*91)==0) cout<<(i+10*j+100+m*1000+n*10000)<<endl;}return 0;}

方法二:直接判断

#include <iostream>using namespace std;int main(){int i,j;for(i=10100;i<99199;i++)    {j=i/100;if(j%10==1&&i%(81*91)==0)cout<<i<<endl;}return 0;}

方法三:先求两个数的最小公倍数——>判断是否大于10100------>是否百位为1

#include <iostream>using namespace std;int main(){int m,n,r,k,j,i,x,p,q,f;m=81,n=91,p=m,q=n;r=m%n;while (r){m=n;    n=r;    r=m%n;}//n为最大公约数j=(p*q/n);//j为最小公倍数i=99199/j;x=f=j;for(r=2;r<=i;r++){if(f<10100)f=x*r;    if(10100<f<99199)k=f/100;if(k%10==1)cout<<f<<endl;}return 0;}

总结:

这三种方法中第二种方法时间复杂度最小,最简单



原创粉丝点击