Problem D

简单题意

有一个序列,序列每一个数所有因数(全部拆成素数),都是由2.3.5.7.组成的(数量不限),把这种数称为Humble数,给出n,求出数列第n个数应该是多少。

解题思路形成过程

若一个数是Humble数,则它的2、3、5、7倍仍然是Humble数。就是说不断找出按不同数量组成的2.3.5.7的数从小到大排序,设a2,a3,a5,a7,分别保存2.3.5.7在humble数中的组成个数,每次找出按当前比例分配最小的那个,之后把他的比例调高一个,再找下一个humble数。

感想

半夜做题,有点困。

AC代码

#include<iostream>
#include<stdio.h>
#include<fstream>
using namespace std;
int min(int a,int b){
    if(a<b)return a;
    return b;
}
int main(){
    ifstream cin("in.txt");
    freopen("in.txt","r",stdin);
    int dp[5842];dp[1]=1;
    int a2=1,a3=1,a5=1,a7=1;
    int k=2;
    while(k<=5842){
        int temp=min(min(2*dp[a2],3*dp[a3]),min(5*dp[a5],7*dp[a7]));
        dp[k++]=temp;
        if(temp==2*dp[a2])a2++;
        if(temp==3*dp[a3])a3++;  
        if(temp==5*dp[a5])a5++;  
        if(temp==7*dp[a7])a7++;
    }
    int n;
    while(cin>>n&&n){
        if(n%10==1&&n%100!=11){
        cout<<"The "<<n<<"st humble number is "<<dp[n]<<"."<<endl;    
        }else if(n%10==2&&n%100!=12){
        cout<<"The "<<n<<"nd humble number is "<<dp[n]<<"."<<endl;
        }else if(n%10==3&&n%100!=13){
        cout<<"The "<<n<<"rd humble number is "<<dp[n]<<"."<<endl;    
        }else{
        cout<<"The "<<n<<"th humble number is "<<dp[n]<<"."<<endl;    
        }
    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值