Problem3-1004

简单题意:

许多的唯一主要因素是2,3,5或7被称为一个不起眼的数字。序列1,2,3,4,5,6,7,8,9,10,12,14,15,16,18,20,21,24,25,27,...示出第一20谦虚数字。搜索结果编写一个程序,发现在这个顺序打印第n个元素结果

解题思路:

谦卑number从1为"始祖",剩下的所有数,其实都是在此基础上乘以2,3,5,7演化出来的,:f[t]=min(2*f[i],3*f[j],5*f[k],7*f[l]); 

代码如下:
#include <iostream>
#include <cstdio>


using namespace std;


const int maxn = 5843;
int humber[maxn];


void prepare() {
    int i;
    humber[1] = 1;
    int na;
    int nb;
    int nc;
    int nd;
    int pos1 = 1;
    int pos2 = 1;
    int pos3 = 1;
    int pos4 = 1;


    for (i = 2; i <= maxn; ++i) {
        //从符合要求的数中找到最小的那个数作为目前humber数
        humber[i] = min(min(na = humber[pos1] * 2,nb = humber[pos2] * 3),
                        min(nc = humber[pos3] * 5, nd = humber[pos4] * 7));


        if (humber[i] == na) {//如果选择了这个因子,则将起索引向后移一位
            pos1++;
        }
        if (humber[i] == nb) {
            pos2++;
        }
        if (humber[i] == nc) {
            pos3++;
        }
        if(humber[i] == nd){
            pos4++;
        }


    }
}


int main() {
    prepare();
    int n;
    while (scanf("%d", &n) != EOF, n) {
         printf("The %d",n);


        if (n % 100 != 11 && n % 10 == 1){
            printf("st");
        }else if (n % 100 != 12 && n % 10 == 2){
            printf("nd");
        }else if (n % 100 != 13 && n % 10 == 3){
            printf("rd");
        }else{
            printf("th");
        }
        printf(" humble number is %d.\n",humber[n]);
    }


    return 0;
}







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值