POJ 2545+2591+2247+1338简单水题

【题意简述】:就是有这样的一个序列,就拿当p1 = 2,p2 = 3, p3 = 5,来举例,由这三个数为基准组成的序列是:

2,3,4,5,6,8,9,10,12……现在给你这个序列数组的下标,让你求得这个数组中,这个下标里的数是多少。

【分析】:2,3,4,5,6,8,9,10,12……这个序列式由2,3,5这三个数生成的,具体如何生成,就是:

详见代码:

这里以POJ2545为例:

//弄清其中的逻辑关系,可以从最简单的2,3,5试着做起!
#include<iostream>
#include<algorithm>
using namespace std;

int main()
{
	long long p1,p2,p3;
	int n;
	long long H[100005];
	int a1,a2,a3;

	while(cin>>p1>>p2>>p3>>n)
	{
		H[1] = 1;
		a1=a2=a3=1;
		for(int i = 2;i<=n+1;i++)
		{
			H[i] = min(p1*H[a1],min(p2*H[a2],p3*H[a3]));
			if(H[i]==p1*H[a1])  a1++;
			if(H[i]==p2*H[a2])  a2++;
			if(H[i]==p3*H[a3])  a3++;
		}
		cout<<H[n+1]<<endl;
	}
	return 0;
}

另外三道题与这个相差无几,都是这个的变形

只不过2247 注意输出的格式!

//  C++ 代码 题目本身很简单,注意格式输出!!

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;

int main()
{
	int a1,a2,a3,a4;
	int n;
	long long humble[6000];
	humble[1]=1;
	a1=1;
	a2=1;
	a3=1;
	a4=1;
	for(int i=2;i<=5842;i++)
	{
		humble[i] = min(2*humble[a1],min(3*humble[a2],min(5*humble[a3],7*humble[a4])));
		if(humble[i]==2*humble[a1])
			a1++;
		if(humble[i]==3*humble[a2])
			a2++;
		if(humble[i]==5*humble[a3])
			a3++;
		if(humble[i]==7*humble[a4])
			a4++;
	}
	//string b;
	while(1)
	{
		cin>>n;
		if(n==0)
			break;
		if(n%10==1)
		{
			if(n%100==11)
				cout<<"The "<<n<<"th"<<" humble number is "<<humble[n]<<"."<<endl;
			else
				cout<<"The "<<n<<"st"<<" humble number is "<<humble[n]<<"."<<endl;
		}

		if(n%10==2)
		{
			if(n%100==12)
				cout<<"The "<<n<<"th"<<" humble number is "<<humble[n]<<"."<<endl;
			else
				cout<<"The "<<n<<"nd"<<" humble number is "<<humble[n]<<"."<<endl;
		}

		if(n%10==3)
		{
			if(n%100==13)
				cout<<"The "<<n<<"th"<<" humble number is "<<humble[n]<<"."<<endl;
			else
				cout<<"The "<<n<<"rd"<<" humble number is "<<humble[n]<<"."<<endl;
		}

		if(n%10>3||n%10==0)
			cout<<"The "<<n<<"th"<<" humble number is "<<humble[n]<<"."<<endl;

	}
}

POJ  2591

// 39392K  141Ms
// 打表过得 =_=
#include<iostream>
#include<algorithm>
using namespace std;
int S[10000001];

int main()
{
	int a,b,n;
	S[1] = 1;
	a = b = 1;
	for(int i = 2;i<=10000000;i++)
	{
		S[i] = min(2*S[a]+1,3*S[b]+1);
		if(S[i] == 2*S[a]+1) a++;
		if(S[i] == 3*S[b]+1) b++;
	}
	while(cin>>n)
	{
		cout<<S[n]<<endl;
	}
	return 0;
}

POJ 2545+2591+2247+1338简单水题,布布扣,bubuko.com

时间: 2024-10-19 22:28:57

POJ 2545+2591+2247+1338简单水题的相关文章

POJ 3069 Saruman&#39;s Army(水题,简单的贪心)

[题意简述]:在一条直线上有N个点,每个点的位置分别是Xi,现从这N个点中选择若干个点给他们加上标记.使得,对每个点而言,在其距离为R的范围内都有带有标记的店,问   至少   要有几个被标记的点. [分析]:我们可以对这个点的序列简单的排序,按照从左到右,从小到大,然后对于最左边的这一个点,我们计算从这个点开始加上这个距离R可以到达的最远的但又小于这个距离R的点是哪一个,然后以这个点为基准,重复上述的过程,最终计算出点的个数. 详见代码: //244K 63Ms #include<iostre

POJ 2081 Recaman&#39;s Sequence(水题)

[题意简述]:这个题目描述很短,也很简单.不再赘述. [分析]:只需再加一个判别这个数是否出现的数组即可,注意这个数组的范围! // 3388K 0Ms #include<iostream> using namespace std; #define Max 500001 int a[Max]; bool b[10000000] = {false}; // b的数据范围是可以试出来的- void init() { a[0] = 0; b[0] = true; for(int m = 1;m<

HDU 5135 Little Zu Chongzhi&#39;s Triangles(简单水题)

题目链接: 戳我 题目大意: 给一堆 木棍,用这些木棍组成三角形,要组成的所有的三角形的面积和最大,不一定要用完所有的木棍. 样例解释: 3 //三个棍子 1 1 20   // 每个棍子的长度,自然,这三个棍子不可能组成三角形,故输出 0.00 7          // 7个棍子 3 4 5 3 4 5 90 // 组成两个三角形(3, 3 4)和(4, 4, 5),面积和即为13.64 0   // 输出 0 退出 解题思路: 本来不想写题解的,因为太水了,,,,,,, 可是看到 谷歌搜出

Goldbach&#39;s Conjecture POJ - 2262 线性欧拉筛水题 哥德巴赫猜想

题意 哥德巴赫猜想:任一大于2的数都可以分为两个质数之和 给一个n 分成两个质数之和 线行筛打表即可 可以拿一个数组当桶标记一下a[i]  i这个数是不是素数  在线性筛后面加个装桶循环即可 #include<cstdio> #include<cstring> using namespace std; bool Is_Primes[1000005]; int Primes[1000005]; int cnt; void Prime(int n){ cnt=0; memset(Is_

POJ 2070 Filling Out the Team(水题)

[题目简述]:给出了球场上WideReceiver,Lineman,Quarterback三个位置所需人员的最低属性(speed,weight ,strength)要求,输入:三个数据,为别为speed.weight.strength,若输入的速度低于或等于球场上位置的要求,体重和力量大于或等于球场上位置的要求,则输出相应的符合位置,若有多个符合的位置,中间用一个空格隔开输出,如没有符合位置,则输出 No positions. [分析]:很简单,但是,对于我的代码还是有个疑问,就是拿题目中前两个

poj 3103 Cutting a Block 模拟水题

水题 #include <iostream> using namespace std; int main() { int x,y,z,n; scanf("%d%d%d%d",&x,&y,&z,&n); for(int i=0;i<n;++i) printf("0 0 %.8lf %d %d %.8lf\n",(z*1.0/n)*i,x,y,(z*1.0/n)*(i+1)); return 0; } 版权声明:本文为博

简单水题 POJ 2291 Rotten Ropes

题目传送门 1 /* 2 我校oj的源题,看懂题意就很水,贴出来省的再敲:) 3 */ 4 #include <cstdio> 5 #include <algorithm> 6 #include <cstring> 7 using namespace std; 8 9 const int MAXN = 1e3 + 10; 10 const int INF = 0x3f3f3f3f; 11 int a[MAXN]; 12 13 int main(void) //POJ 2

POJ 1936 All in All 匹配, 水题 难度:0

题目 http://poj.org/problem?id=1936 题意 多组数据,每组数据有两个字符串A,B,求A是否是B的子串.(注意是子串,也就是不必在B中连续) 思路 设置计数器cnt为当前已匹配A的长度,明显在扫描B的过程中只需要记住cnt这一个状态. 扫描B,每次与A[cnt]匹配就将计数器增加1,cnt与A的长度一致时A就是B的子串. 感想 这道题也许可以用更复杂的方法. 代码 1 #include <cstdio> 2 #include <cstring> 3 #i

POJ 2039 To and Fro(水题)

[题目简述]:字符串的简单处理,看懂题意,特别是他给的那个例子就好,很简单 见代码: #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> using namespace std; char str[211][211]; int main() { int colum; char str1[211]; int tmp; while(cin>>colum,c