博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU1058 Humble Numbers 【数论】
阅读量:5784 次
发布时间:2019-06-18

本文共 2101 字,大约阅读时间需要 7 分钟。

Humble Numbers

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 17407    Accepted Submission(s): 7565
Problem Description
A number whose only prime factors are 2,3,5 or 7 is called a humble number. The sequence 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.
Write a program to find and print the nth element in this sequence
 
Input
The input consists of one or more test cases. Each test case consists of one integer n with 1 <= n <= 5842. Input is terminated by a value of zero (0) for n.
 
Output
For each test case, print one line saying "The nth humble number is number.". Depending on the value of n, the correct suffix "st", "nd", "rd", or "th" for the ordinal number nth has to be used like it is shown in the sample output.
 
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.

#include 
#define maxn 5845int dp[maxn] = {1, 1};int a, b, c, d;const char *sam[] = { "st", "nd", "rd", "th" };int min(int u, int v, int x, int y){ int tmp = u; if(tmp > v) tmp = v; if(tmp > x) tmp = x; if(tmp > y) tmp = y; if(tmp == u) ++a; if(tmp == v) ++b; if(tmp == x) ++c; if(tmp == y) ++d; return tmp;}const char *f(int n){ if(n % 10 == 1 && n % 100 != 11) return sam[0]; if(n % 10 == 2 && n % 100 != 12) return sam[1]; if(n % 10 == 3 && n % 100 != 13) return sam[2]; return sam[3];}int main(){ int i, n; a = b = c = d = 1; for(i = 2; i < maxn; ++i) dp[i] = min(dp[a] * 2, dp[b] * 3, dp[c] * 5, dp[d] * 7); while(scanf("%d", &n), n) printf("The %d%s humble number is %d.\n", n, f(n), dp[n]); return 0;}

转载地址:http://ybvyx.baihongyu.com/

你可能感兴趣的文章
JNI调用c++实现AES加密解密
查看>>
PXE 网络装机
查看>>
linux下fstab文件修改后,系统无法启动
查看>>
DCN SWITCH指令
查看>>
Java笔试题解(5)
查看>>
性能测试规定——可移植性测试规定
查看>>
innobackupex备份mysql数据库
查看>>
NodeJS+(Node-WebSocket-Server)+HTML5 WebSocket实现websocket
查看>>
如何运用百度地图SDK进行开发(一)初级篇
查看>>
Rails Model验证及自定义验证 --非常有用
查看>>
电脑蓝屏代码汇总
查看>>
Visual Studio Code-批量添加或删除注释行
查看>>
基础选择器
查看>>
C语言(数组)练习题分享
查看>>
用.Net报表控件,实现20万门店的数据管理
查看>>
浏览器差异 漫谈console.log
查看>>
java 多种判断key是否在map中存在的方法
查看>>
jdk1.8以上去掉List集合中的空字符串
查看>>
翻译 A Gentler Introduction to Programming
查看>>
MySQL索引优化
查看>>