hdu 1058

?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

题意:求素因子只有2 3 5 7的数<br>zsd:5842 各种打表<br>#include<iostream>

#include<cstring>

using
namespace std;

__int64
a[6000];

int main()

{

    int
n;

    memset(a,0,sizeof(a));

    __int64
c=3000000000;

        a[1]=1;a[2]=2;a[3]=3;a[4]=4;

        for(int
i=5;i<=5842;i++)

        {

            c=3000000000;

            for(int
j=1;j<i;j++)

            {

                if(a[j]*2>a[i-1]&&a[j]*2<c)

                    c=a[j]*2;

                else
if(a[j]*3>a[i-1]&&a[j]*3<c)

                    c=a[j]*3;

                else
if(a[j]*5>a[i-1]&&a[j]*5<c)

                    c=a[j]*5;

                else
if (a[j]*7>a[i-1]&&a[j]*7<c)

                    c=a[j]*7;

                else

                    continue;

            }

            a[i]=c;

        }

        while(cin>>n&&n)

        {

        if(n % 10 == 1 && n % 100 != 11) 

              printf("The %dst humble number is %lld.\n",n ,a[n]); 

          else
if(n % 10 == 2 && n % 100 != 12) 

              printf("The %dnd humble number is %lld.\n",n ,a[n]); 

          else
if(n % 10 == 3 && n % 100 != 13) 

              printf("The %drd humble number is %lld.\n",n ,a[n]); 

          else

              printf("The %dth humble number is %lld.\n",n ,a[n]); 

        }

        return
0;

}<br>方法2: 比较经典<br>#include<iostream><br>#include<cstdio><br>#include<cstring><br>#include<algorithm><br>using
namespace std;<br>long
long num[60000];<br>int
b[4]={2,3,5,7};<br>long
long  min(long
long a,long
long b,long
long c,long
long d)<br>{<br>    a=a>b?b:a;<br>    c=c>d?d:c;<br>    return
a>c?c:a;<br>}<br>int
main()<br>{<br>    num[1]=1;<br>    int
i;<br>    int
l1=1,l2=1,l3=1,l4=1;<br>    for(i=2;i<=5842;i++)<br>    {<br>        num[i]=min(num[l1]*2,num[l2]*3,num[l3]*5,num[l4]*7);<br>        if(num[i]==num[l1]*2) l1++;<br>        if(num[i]==num[l2]*3) l2++;<br>        if(num[i]==num[l3]*5) l3++;<br>        if(num[i]==num[l4]*7) l4++;<br>    }<br>    int
n;<br>    while(scanf("%d",&n),n)<br>    {<br>        if(n % 10 == 1 && n % 100 != 11)<br>              printf("The %dst humble number is %lld.\n",n ,num[n]);<br>          else
if(n % 10 == 2 && n % 100 != 12)<br>              printf("The %dnd humble number is %lld.\n",n ,num[n]);<br>          else
if(n % 10 == 3 && n % 100 != 13)<br>              printf("The %drd humble number is %lld.\n",n ,num[n]);<br>          else<br>              printf("The %dth humble number is %lld.\n",n ,num[n]);<br>    }<br>    return
0;<br>}

hdu 1058,布布扣,bubuko.com

时间: 2025-01-31 03:58:07

hdu 1058的相关文章

hdu 1058 Humble Numbers || poj 1338(dp)

两题都是一样的题目 只是hdu 1058 多了个7 题意:求一个每个数因子仅含2 3 5 7 的 序列 问 第n个数是几 思路: ans[i]=min(min(ans[n2]*2,ans[n3]*3),min(ans[n5]*5,ans[n7]*7)); if(ans[i]==ans[n2]*2) n2++; if(ans[i]==ans[n3]*3) n3++; if(ans[i]==ans[n5]*5) n5++; if(ans[i]==ans[n7]*7) n7++; hdu 1058 #

HDU 1058 Humble Numbers &amp;&amp; NOJ 1420 丑数 (数位dp)

Humble Numbers                          Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)                                          Total Submission(s): 18555    Accepted Submission(s): 8080 Problem Description A numb

HDU 1058 Humble Numbers (dp+打表)

先是想筛法素数表啊,然后1~2000000000枚举打表啊,结果越想越不对. 后来想到唯一分解定理,可是怎么实现呢..果然还是需要努力啊.. 研究了discuss代码,码之~ ~~~~ dp的思想,若dp[i]是Humble Numbers,那么dp[i]*2,dp[i]*3,dp[i]*5,dp[i]*7都将是Humble Numbers. 所以只需要注意连续性便好了. #include<cstdio> #include<algorithm> #include<cmath&

HDU 1058 Humble Numbers (打表)

题目链接:HDU 1058 Humble Numbers 题意:一些数他们的素数因子只有2,3,5,7.求这些数. 因为这些数的因子只可能是2,3,5,7.所以通过2,3,5,7这个四个数构造这个数列,这个数列靠后的数必定是前面的数乘上2,3,5,7得到. AC代码: #include<stdio.h> #include<set> #define ll __int64 using namespace std; set<ll> s; set<ll>::iter

HDU 1058 Humble Numbers(DP,数)

题意  所有只能被2,3,5,7这4个素数整除的数称为Humble Number  输入n  输出第n个Humble Number 1是第一个humble number  对于一个Humble Number  a  有2*a,3*a,5*a,7*a都是Humble Number  可以以1为基数  依次展开即可得到一定范围内的Humble Number 用i,j,k,l分别记录 2,3,5,7分别乘到了第几个Humble Number  当前在计算第cnt个Humble Number  那么有

HDU 1058 Humble Numbers(离线打表)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1058 解题报告:输入一个n,输出第n个质因子只有2,3,5,7的数. 用了离线打表,因为n最大只有5842. 1 #include<stdio.h> 2 #define INT __int64 3 INT ans[5850] = { 4 0,1,2,3,4,5,6,7,8,9,10,12,14,15,16,18,20,21,24,25,27,28,30,32,35,36,40,42,45,48,4

HDU 1058 Humble Numbers(递推)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1058 题意:丑数是指只有2,3,5 or 7这几个素因数的数(所以1也是丑数),找到第n个丑数. 思路:除了2,3,5,7任何一个丑数都是由另一个丑数乘上2,或3,或5,或7得到的. 所以可以用优先队列,每取出一个丑数就入队他们乘上2,3,5,7得到的四个丑数,这样每个丑数都生成了.复杂度还是不错的,不过按这种方法会生成比较大的数,最终爆掉int,所以要用long long //93MS 1228K

hdu 1058 Humble Numbers【dp】

题目链接:http://acm.acmcoder.com/showproblem.php?pid=1058 题意:数字只有2,3,5,7素因子的数叫做Humble Number,问你第 n 个Humble Number是什么? 解法:枚举. 代码: #include <stdio.h> #include <string.h> #include <vector> #include <string> #include <algorithm> #inc

【转】HDU 1058 Humble Numbers:寻找丑数问题?DP?

这个和上一道HDU 3199 Hamming Problem是类似的,有了思路就开始码代码了,可是!序数词的写法不对(代码注释部分)又上网普及了序数词的写法··· 搜到其他解题报告 其中有把这道题分类为DP的,最优子结构?无后效性? 还有“寻找丑数问题” 详情点这里. #include<iostream> #include<cstdio> using namespace std; const int Size=5842; long long num[Size+1]; int mai