今天继续刷牛客真题,寻找第N个丑数。
分析:
方法一:通过从1开始累加,并同时判断是否是丑数,如果是就N减一,直到N为0的时候,就是第N个丑数。
方法二:通过生成的方式,从1开始,不断生成丑数,直到生成第N个丑数。生成丑数的方法是,对每个数分别进行乘以2、3、5,将结果中最小的作为下一个丑数。
问题:
1、Python中函数定义;
2、
附上C++代码:
#include<iostream>
using namespace std;
bool isUgly(int a)
{
if(a==1)
return true;
if(a%2==0)
return isUgly(a/2);
if(a%3==0)
return isUgly(a/3);
if(a%5==0)
return isUgly(a/5);
return false;
}
int main()
{
int N;
cin>>N;
int i=1;
while(N>0)
{
if(isUgly(i++))
N--;
}
cout<<i-1<<endl;
return 0;
}
附上Python代码1:
print(sorted(2**i*3**j*5**k
for i in range(30)
for j in range(20)
for k in range(15))[int(input())-1])
附上Python代码2:
N=int(input())
t=[1]
m2=0
m3=0
m5=0
if N==0:
print(0)
else:
for i in range(N):
a=t[m2]*2
b=t[m3]*3
c=t[m5]*5
t.append(min(a,b,c))
if t[i+1]==a:
m2+=1
if t[i+1]==b:
m3+=1
if t[i+1]==c:
m5+=1
print(t[-2])