POJ1338 & POJ2545 & POJ2591 & POJ2247 找给定规律的数
来源:互联网 发布:网络犯罪罪名 编辑:程序博客网 时间:2024/05/01 13:29
POJ1338 2545 2591 2247都是一个类型的题目,所以放到一起来总结
POJ1338:Ugly Numbers
Time Limit: 1000MS Memory Limit: 10000KTotal Submissions: 21708 Accepted: 9708
Description
Ugly numbers are numbers whose only prime factors are 2, 3 or 5. The sequence
1, 2, 3, 4, 5, 6, 8, 9, 10, 12, ...
shows the first 10 ugly numbers. By convention, 1 is included.
Given the integer n,write a program to find and print the n'th ugly number.
1, 2, 3, 4, 5, 6, 8, 9, 10, 12, ...
shows the first 10 ugly numbers. By convention, 1 is included.
Given the integer n,write a program to find and print the n'th ugly number.
Input
Each line of the input contains a postisive integer n (n <= 1500).Input is terminated by a line with n=0.
Output
For each line, output the n’th ugly number .:Don’t deal with the line with n=0.
Sample Input
1290
Sample Output
1210
找质因子为2、3、5的数,实际这些数就是2、3、5这些数互相乘,从大到小排好序的序列。
发现这种题也有一个固定的套路,也渐渐知道模板题是个什么概念了。
代码:
#include <iostream>using namespace std;int main(){int a[1500]={1},i=1,j2=0,j3=0,j5=0,m,count;while(i<1500){m=999999999;if(m>2*a[j2])m=2*a[j2];if(m>3*a[j3])m=3*a[j3];if(m>5*a[j5])m=5*a[j5];if(m==2*a[j2])j2++; if(m==3*a[j3])j3++;if(m==5*a[j5])j5++;a[i]=m;i++;}while(cin>>count&&count){cout<<a[count-1]<<endl;}return 0;}
POJ2545:Hamming Problem
Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 6560 Accepted: 3010
Description
For each three prime numbers p1, p2 and p3, let's define Hamming sequence Hi(p1, p2, p3), i=1, ... as containing in increasing order all the natural numbers whose only prime divisors are p1, p2 or p3.
For example, H(2, 3, 5) = 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, 16, 18, 20, 24, 25, 27, ...
So H5(2, 3, 5)=6.
For example, H(2, 3, 5) = 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, 16, 18, 20, 24, 25, 27, ...
So H5(2, 3, 5)=6.
Input
In the single line of input file there are space-separated integers p1 p2 p3 i.
Output
The output file must contain the single integer - Hi(p1, p2, p3). All numbers in input and output are less than 10^18.
Sample Input
7 13 19 100
Sample Output
26590291
和前面的题目一个意思,一开始的问题在于输入不超过10^18,心想这不是搞笑吗,又要TLE了。求出来打表?后来发现输出也要不超过10^18。于是就试试,结果成了。
代码:
#include <iostream>#pragma warning(disable:4996)using namespace std;#define MAXN 10006long long a[MAXN];int main(){a[0] = 1;int i=1,i2,j1=0,j2=0,j3=0,p1,p2,p3;long long m;cin>>p1>>p2>>p3>>i2;while(i<=10005){m=9223372036854775807;if(m>p1*a[j1]) m=p1*a[j1];if(m>p2*a[j2]) m=p2*a[j2];if(m>p3*a[j3]) m=p3*a[j3];if(m==p1*a[j1])j1++;if(m==p2*a[j2])j2++;if(m==p3*a[j3])j3++;a[i]=m;i++;}cout<<a[i2]<<endl;return 0;}
POJ2591:Set Definition
Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 9509 Accepted: 4465
Description
Set S is defined as follows:
(1) 1 is in S;
(2) If x is in S, then 2x + 1 and 3x + 1 are also in S;
(3) No other element belongs to S.
Find the N-th element of set S, if we sort the elements in S by increasing order.
(1) 1 is in S;
(2) If x is in S, then 2x + 1 and 3x + 1 are also in S;
(3) No other element belongs to S.
Find the N-th element of set S, if we sort the elements in S by increasing order.
Input
Input will contain several test cases; each contains a single positive integer N (1 <= N <= 10000000), which has been described above.
Output
For each test case, output the corresponding element in S.
Sample Input
100254
Sample Output
4181461
代码:
#include <iostream>#pragma warning(disable:4996)using namespace std;int a[10000005];int main(){a[0] = 1;int i=1,j2=0,j3=0;long long m;while(i<=10000000){m=9223372036854775807;if(m>2*a[j2])m=2*a[j2]+1;if(m>3*a[j3])m=3*a[j3]+1;if(m==2*a[j2]+1)j2++; if(m==3*a[j3]+1)j3++;a[i]=m;i++;}while(scanf("%d",&i)==1){cout<<a[--i]<<endl;}return 0;}
POJ2247:Humble Numbers
Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 9951 Accepted: 4651
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.
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
1234111213212223100100058420
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 <iostream>#pragma warning(disable:4996)using namespace std;#define MAXN 10006long long a[MAXN];int main(){a[1] = 1;int i=1,i2,j1=1,j2=1,j3=1,j4=1;long long m;while(i<=5842){m=4000000000;if(m>2*a[j1]) m=2*a[j1];if(m>3*a[j2]) m=3*a[j2];if(m>5*a[j3]) m=5*a[j3];if(m>7*a[j4]) m=7*a[j4];if(m==2*a[j1])j1++;if(m==3*a[j2])j2++;if(m==5*a[j3])j3++;if(m==7*a[j4])j4++;a[++i]=m;}while(cin>>i2){if(!i2)break;if((i2%100)>=10&&(i2%100)<=20){cout<<"The "<<i2<<"th humble number is "<<a[i2]<<"."<<endl;}else if(i2%10==1){cout<<"The "<<i2<<"st humble number is "<<a[i2]<<"."<<endl;}else if(i2%10==2){cout<<"The "<<i2<<"nd humble number is "<<a[i2]<<"."<<endl;}else if(i2%10==3){cout<<"The "<<i2<<"rd humble number is "<<a[i2]<<"."<<endl;}else {cout<<"The "<<i2<<"th humble number is "<<a[i2]<<"."<<endl;}}return 0;}
所以总结一下的话,因为按一条一条的要求逐渐去查找,前一个数又作为查找后一个数的基础,所以有多少条件就搞多少个j1,j2,j3。取最小的那个,之后选择了哪一个条件,就将对应条件的jn+1,让它到队列的下一个,接着判断,逐渐得到一整个数的序列。
0 0
- POJ1338 & POJ2545 & POJ2591 & POJ2247 找给定规律的数
- poj1338 poj2591 poj2545 这三道题
- poj1338--poj2545--poj2591--打表
- 多式子递推poj2545 poj2591 poj1338
- 转一篇好文:poj1338 poj2591 poj2545 这三道题
- POJ1338||POJ2247
- 规律矩阵找数
- POJ2545-丑数
- hdu1466 计算直线的交点数(找规律+数学)
- HDU2524 找规律的题 求格子中的矩形数
- POJ2591
- poj2591
- POJ2591
- poj2545
- poj2545
- poj2247
- poj2247
- hdu_2608_数论题_找规律
- 字符串的基本用法
- Secure Delivery Center快速入门指南(五):本地更改
- Board level的启动流程分析
- GitHub 优秀的 Android 开源项目
- Facebook测试在品牌专页内开展电商销售
- POJ1338 & POJ2545 & POJ2591 & POJ2247 找给定规律的数
- codeforces #312C 558C C. Amr and Chemistry(位运算)
- 通过CookieManager给WebView设置Cookie
- SpringMvc+Spring同时扫描出现问题。
- 搜索进阶 Fire!
- 字符串的获取
- 一键解决ScrollView嵌套ListView只显示一行的问题
- [MFC] 获得客户区在对话框上的位置
- 抓包使用说明