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;
}
总结:
这三种方法中第二种方法时间复杂度最小,最简单