首页 > 其他 > 详细

HDU1058

时间:2020-12-21 15:14:11      阅读:25      评论:0      收藏:0      [点我收藏+]

题目要求找出给定位置的humble number

所谓humble number即只有质因子2,3,5,7的数

基本思想 dp+打表

#include<iostream>
#define min(a, b) ((a)<(b)?(a):(b))
using namespace std;
int main()
{
    long long a[5843]={0, 1};
    int p2=1, p3=1, p5=1, p7=1;
    for(int i=2; i<5843; i++){
        a[i]=min(min(a[p2]*2, a[p3]*3), min(a[p5]*5, a[p7]*7));
        if(a[i]==2*a[p2]){
            p2++;
        }
        if(a[i]==3*a[p3]){
            p3++;
        }
        if(a[i]==5*a[p5]){
            p5++;
        }
        if(a[i]==7*a[p7]){
            p7++;
        }
    }
    int n;
    while(cin >> n, n){
        if(n%10==1&&n%100!=11){
            cout << "The " << n << "st" << " humble number is " << a[n] << "." << endl;
        }
        else if(n%10==2&&n%100!=12){
            cout << "The " << n << "nd" << " humble number is " << a[n] << "." << endl;
        }
        else if(n%10==3&&n%100!=13){
            cout << "The " << n << "rd" << " humble number is " << a[n] << "." << endl;
        }
        else{
            cout << "The " << n << "th" << " humble number is " << a[n] << "." << endl;
         }
    }
    return 0;
} 

 

踩坑点

1. 序数词命名

2. 对p2, p3, p5, p7的更新,用并行的4个if,这样才是随时更新p的值,不可以使用else if,这样更新是不同步的

HDU1058

原文:https://www.cnblogs.com/ZGCblogs/p/14167323.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!