本文主要是介绍poj1338--poj2545--poj2591--打表,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
http://poj.org/problem?id=1338
http://poj.org/problem?id=2545
http://poj.org/problem?id=2591
三道水题~~~~题目链接在上:
题意很容易理解,解法需要想一想,
即通过维护三个队列,来产生一个带有ans到数组。
以下是代码:
poj1338:
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxnum=1500;
int a[1500]={1};
int main()
{int m=1,n,i=0,j=0,k=0;for(;m<maxnum;){a[m++]=min(a[i]*2,min(a[j]*3,a[k]*5));if(a[m-1]==a[i]*2) ++i;if(a[m-1]==a[j]*3) ++j;if(a[m-1]==a[k]*5) ++k;}while(~scanf("%d",&n),n)printf("%d\n",a[n-1]);return 0;
}
poj2545:
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;ll a[10000100]={1};
int main()
{ll p1,p2,p3,m;while(cin>>p1>>p2>>p3>>m){int i=0,j=0,k=0,n;for(n=1;n<=m;){a[n++]=min(a[i]*p1,min(a[j]*p2,a[k]*p3));if(a[n-1]==a[i]*p1) ++i;if(a[n-1]==a[j]*p2) ++j;if(a[n-1]==a[k]*p3) ++k;}cout<<a[n-1]<<endl;}return 0;
}
poj2591:
#include <cstdio>
using namespace std;
const int maxnum=10000100;
int a[maxnum]={1};
int main()
{int *x1=a,*x2=a,i;int temp1,temp2;for(i=1;i<maxnum;){temp1=2**x1+1,temp2=3**x2+1;if(temp1<temp2) a[i++]=temp1,x1++;else if(temp1>temp2) a[i++]=temp2,x2++;else a[i++]=temp1,x1++,x2++;}int n;while(~scanf("%d",&n))printf("%d\n",a[n-1]);return 0;
}
这篇关于poj1338--poj2545--poj2591--打表的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!