POJ1338 2545 2591 2247都是一个类型的题目,所以放到一起来总结

POJ1338:Ugly Numbers
Time Limit: 1000MS   Memory Limit: 10000K
Total 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. 

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

1
2
9
0

Sample Output

1
2
10

找质因子为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: 65536K
Total 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.

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 10006 long 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: 65536K
Total 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.

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

100
254

Sample Output

418
1461

代码:

#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: 65536K
Total 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. 

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 <iostream>
#pragma warning(disable:4996)
using namespace std;
#define MAXN 10006 long 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。让它到队列的下一个,接着推断,逐渐得到一整个数的序列。

POJ1338 &amp; POJ2545 &amp; POJ2591 &amp; POJ2247 找给定规律的数的更多相关文章

  1. ytu 1061: 从三个数中找出最大的数(水题,模板函数练习 + 宏定义练习)

    1061: 从三个数中找出最大的数 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 154  Solved: 124[Submit][Status][We ...

  2. c# 各种排序算法+找第二大的数+句子单词反转

    冒泡排序 // 冒泡排序 bubble sort public static int[] BubbleSort(int []array) { bool isContinue = true; ; i & ...

  3. 与班尼特·胡迪一起找简单规律(HZOJ-2262)

    与班尼特·胡迪一起找简单规律 Time Limit:  1 s      Memory Limit:   256 MB Description 班尼特·胡迪发现了一个简单规律 给定一个数列,1 , 1 ...

  4. 如何在PHP页面中原样输出HTML代码(是该找本php的数来看了)

    如何在PHP页面中原样输出HTML代码(是该找本php的数来看了) 一.总结 一句话总结:字符串与HTML之间的相互转换主要应用htmlentities()函数来完成. 1.php中的html标签如何 ...

  5. LeetCode Find the Duplicate Number 找重复出现的数(技巧)

    题意: 有一个含有n+1个元素的数组,元素值是在1-n之间的整数,请找出其中出现超过1次的数.(保证仅有1个出现次数是超过1的数) 思路: 方法一:O(nlogn).根据鸽笼原理及题意,每次如果< ...

  6. hdu 4925 贪心 自己从小到大做数据找方法规律

    http://acm.hdu.edu.cn/showproblem.php?pid=4925 自己逐个做数据找规律.提供下我的找的: 1 2 1 3 2 2 2 3 3 3 然后发现这种矩阵是最优的: ...

  7. 找第二大的数SQL-Second Highest Salary

    1: 找小于最大的最大的 select max(Salary) from Employee where Salary<(select MAX(Salary) from Employee); 2. ...

  8. 【算法】—— 1到n中减少了一个数,顺序被打乱,找出缺失的数

    问题 有0-n这n+1个数,但是其中丢了一个数,请问如何找出丢了哪个数? 五种方法 1)用1+2+...+n减去当前输入数据的总和.时间复杂度:O(n) 空间复杂度:O(1) [容易溢出] 2)用12 ...

  9. 【模板】BM算法(找线性规律万能模板)

    (1) n是指要找该数列的第n项. (2) 往vec中放入该数列前几项的值,越多越精确. #include<set> #include<cmath> #include<v ...

随机推荐

  1. 2015 Multi-University Training Contest 3 hdu 5318 The Goddess Of The Moon

    The Goddess Of The Moon Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/ ...

  2. HDU 2686 Matrix(最大费用最大流+拆点)

    题目链接:pid=2686">http://acm.hdu.edu.cn/showproblem.php?pid=2686 和POJ3422一样 删掉K把汇点与源点的容量改为2(由于有 ...

  3. 指尖上的电商---(5)schema.xml配置具体解释

    这一节我们看下schema.xml文件中各个节点的配置极其作用.schema.xml文件中面主要定义了索引数据类型,索引字段等信息. 主要包含了下面节点 1.fieldtype节点 fieldtype ...

  4. Oracle Table Function

    Oracle Table Function在Oracle9i时引入.完美的兼容了view和存储过程的长处: 应用举例: 1.Table()函数: set feedback off create or ...

  5. 【Bootstrap】一个PC、平板、手机同一时候使用并且美观的登陆页面

    Bootstrap如同前台框架,它已经布置好不少的CSS.前端开发的使用须要则直接调用就可以.其站点的网址就是http://www.bootcss.com.使用Bootstrap能降低前端开发时候在C ...

  6. js中callback执行

    <!DOCTYPE HTML> <html> <head> <meta charset="GBK" /> <title> ...

  7. Oracle GoldenGate

    Oracle GoldenGate实现数据库同步 前言:最近刚好在弄数据库同步,网上查了些资料再加上自己整理了一些,做个分享! 一.GoldenGate的安装 官方文档: Oracle®GoldenG ...

  8. NOIP卡常数技巧

    NOIP卡常数技巧 https://blog.csdn.net/a1351937368/article/details/78162078 http://www.mamicode.com/info-de ...

  9. Calender

    public static void main(String[] args) { // TODO 自动生成的方法存根 Calendar c = new GregorianCalendar(); c., ...

  10. vue 父子组件传值以及方法调用,平行组件之间传值以及方法调用大全

    vue项目经常需要组件间的传值以及方法调用,具体场景就不说了,都知道.基本上所有的传值都可以用vuex状态管理来实现,只要在组件内监听vuex就好. vue常用的传值方式以及方法有: 1. 父值传子( ...