习题三1004

Problem D

TimeLimit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K(Java/Other)

Problem Description

Anumber whose only prime factors are 2,3,5 or 7 is called a humble number. Thesequence 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 24, 25, 27,... shows the first 20 humble numbers. <br><br>Write a program tofind
and print the nth element in this sequence<br>

Input

Theinput consists of one or more test cases. Each test case consists of oneinteger n with 1 <= n <= 5842. Input is terminated by a value of zero (0)for n.<br>

Output

Foreach test case, print one line saying "The nth humble number isnumber.". Depending on the value of n, the correct suffix "st","nd", "rd", or "th" for the ordinal number nthhas to be used like it is shown in the sample output.<br>

Sample Input

1
2
3
4
11
12
13
21
22
23
100
1000
5842
0

Sample Output

The 1st humble number is 1.
The 2nd humble number is 2.
The 3rd humble number is 3.
The 4th humble number is 4.
The 11th humble number is 12.
The 12th humble number is 14.
The 13th humble number is 15.
The 21st humble number is 28.
The 22nd humble number is 30.
The 23rd humble number is 32.
The 100th humble number is 450.
The 1000th humble number is 385875.
The 5842nd humble number is 2000000000.

题意:

符合要求的丑数只含有2、3、5、7的质因子求前5842个丑数。

解题思路:

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

#include <iostream>
#include <stdio.h>
using namespace std;
int f[5843],n;
int i,j,k,l;

int min(int a,int b,int c,int d)
{
    int min=a;
    if(b<min) min=b;
    if(c<min) min=c;
    if(d<min) min=d;

    if(a==min) i++;
    if(b==min) j++;
    if(c==min) k++;
    if(d==min) l++;

    return min;
}

int main()
{
    i=j=k=l=1;
    f[1]=1;
    for(int t=2;t<=5842;t++)
    {
        f[t]=min(2*f[i],3*f[j],5*f[k],7*f[l]);
    }
    while(scanf("%d",&n)&&n!=0)
    {
        if(n%10==1&&n%100!=11)
            printf("The %dst humble number is %d.\n",n,f[n]);
        else if(n%10==2&&n%100!=12)
            printf("The %dnd humble number is %d.\n",n,f[n]);
        else if(n%10==3&&n%100!=13)
            printf("The %drd humble number is %d.\n",n,f[n]);
        else
            printf("The %dth humble number is %d.\n",n,f[n]);
    }

    return 1;
}
时间: 2024-11-01 22:58:48

习题三1004的相关文章

操作系统概述习题三

习题三 2.批处理的主要缺点是无交互性 当计算机提供用户态和核心态时,输入/输出指令必须在核心态下执行 操作系统采用多道程序设计技术的主要原因是为了提高利用率和系统吞吐量 操作系统中,通道技术是一种硬件技术 3.用户程序设计时,使用系统调用命令,该命令经过编译后,形成若干参数和陷入指令 系统调用功能是操作系统向用户提供的接口 用户及其应用程序和应用系统是通过系统调用提供的支持和服务来使系统资源完成其操作 4.中断处理是操作系统必须提供的操作 5.用户程序在用户态下要使用特权指令而引起的中断属于访

软件工程P37习题三程序代码

//软件工程作业P37第三题   import java.util.Arrays;       //假设传入的数组是{how,are,you}   public class Test0001 {   public void theExchangeOfWords(String[] a){   for (int i = 0; i < a.length/2; i++) {   String temp;   temp=a[i];   a[i]=a[a.length-1-i];   a[a.length-

习题三——C语言笔试题

1.下面的程序片段的输出为? #include <stdio.h> #include <string.h> int main(void) { char str[]="h\t\"\\/\012\00034"; printf("%d", strlen(str)); } 分析:主要考察的是转义字符和strlen库函数的使用.\t和\"以及\\分别是用\符号表示其后的为转义符,这三个转义符分别为报警符."和\三个符号:在

习题三

1.打印一个整型数据,要求这个数为负数前面输出负号,这个数为正数前面输出正号. printf("%+d", n); 注:在printf输出控制中+表示输出符号(正号或负号).-表示结果左对齐,右边填空格,如果不加则表示右对齐. 例如:printf("%-8+d", n);  //宽度为8左对齐带符号输出 2.下面代码的输出结果为? #include <stdio.h> #include <stdlib.h> int main(void) {

C++习题三10、11题

10.  某单位的职工工资包括基本工资Wage,岗位巾Subsidy,房租Rent,水费Waterfee,电费Elecfee,设计实现工资管理的类Salary,该类的形式如下: class salary{ private: double wage,subsidy,rent,waterfee,elecfee; public: salary(-----){初始化工资数据的各分项} salary(){初始化工资的各分项数据为0} void setXX (double f){xx=f;} double 

C++习题三12题

12.设计一个整型链表类list,能够实现链表节点的插入(insert).删除(delete),以及链表数据的输出操作(print) #include<iostream> using namespace std; class intLinkList{ private: int *list; int size; int length; public: intLinkList(int s){ list = new int[s]; size=s;  length = 0; } int insert(

算法导论第四版学习——习题三Collinear Points

题目正文: http://coursera.cs.princeton.edu/algs4/assignments/collinear.html 作业难点: 1.仔细思考会感觉有很多实现方法,但是如果没有适当使用排序,算法时间复杂度就会轻易超过要求.(包括暴力算法) 2.隐含需要实现自己的数据结构用来组织“线”的集合,当然也可以用Stack或者Queue或者LinkedList,但是我个人是自己实现的. 3.由于一条线段只能出现一次,所以有一个去重的问题.(最难) 作业技巧: 1.基本按照题目的先

ajax练习习题三搜索

做一个汽车搜索页面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv=&quo

习题三 11-15

11.设函数\(f(x)\)在\((a,+\infty)\)上单调上升,\(\lim\limits_{n\rightarrow\infty}x_n=+\infty\).证明:若\(\lim\limits_{n\rightarrow\infty}f(x_n)=A\),则\(\lim\limits_{x\rightarrow+\infty}f(x)=A\). 证明 \(\forall M>0,\exists N_0>0,\)当\(n>N_0,x_n>M\), \(\forall\var