简单题意:
许多的唯一主要因素是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;
}
#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;
}