一、题目大意

本题要求写出前5482个仅能被2,3,5, 7 整除的数。

二、题解

这道题从本质上和Poj 1338 Ugly Numbers(数学推导)是一样的原理,只需要在原来的基础上加上7的运算即可。还有一个不同之处在于输出上,这个题要求第n的英语表示。而英语中的表示呢,如果n的个位数是1,用nst表示个位数是2的用,nnd表示;个位数是3的,用nrd表示。但是n的最后两位是11、12、13的还是用nth表示,其他的也是用th表示。

三、java代码

    import java.util.Scanner;

    public class Main {
public static String format(int n){
if(n % 10==1 && n% 100 !=11)
return n+"st";
if(n % 10==2 && n% 100 !=12)
return n+"nd";
if(n % 10==3 && n% 100 !=13)
return n+"rd";
return n+"th";
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n;
int i2_mul;
int i3_mul;
int i5_mul;
int i7_mul;
long[] ugly=new long[5843]; i2_mul = 1;
i3_mul = 1;
i5_mul = 1;
i7_mul = 1;
ugly[1]=1; for( int i = 2; i <= 5842; i++ ){
ugly[i] = Math.min(Math.min(ugly[i2_mul]*2,
Math.min(ugly[i3_mul]*3,ugly[i5_mul]*5)), ugly[i7_mul]*7);
if(ugly[i] == ugly[i2_mul]*2 )
i2_mul++;
if(ugly[i] == ugly[i3_mul]*3 )
i3_mul++;
if(ugly[i] == ugly[i5_mul]*5)
i5_mul++;
if(ugly[i] == ugly[i7_mul]*7)
i7_mul++;
} while((n=sc.nextInt())!=0){
System.out.println("The "+format(n)+" humble number is "+ugly[n]+".");
}
}
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

05-11 11:07