HDU-1058Humble Numbers

題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=1058

本題思路很簡單:就是用2,3,5,7循環來 
求第i個f[i],第i個f[i]必定等於 
前i-1個數中其中一個數與{2,3,5,7}中 
其中一個的乘積,於是答案就出來了,就是取從1開始取與2,3,5,7相乘,取最小的,取了一個對應指針就往前移一位

#include<cstdio>
#include<iostream>
#include<cstring>
#define N 5843
using namespace std;
int dp[N];
int min(int x,int y) {
	return x<y?x:y;
}
int main() {
	int n,a,b,c,d;
	a=b=c=d=1;
	dp[1]=1;
	for(int i=2; i<=N-1; i++) {
		dp[i]=min(dp[a]*2,min(dp[b]*3,min(dp[c]*5,dp[d]*7)));
		if(dp[i]==dp[a]*2) a++;
		if(dp[i]==dp[b]*3) b++;
		if(dp[i]==dp[c]*5) c++;
		if(dp[i]==dp[d]*7) d++;
	}
	while(~scanf("%d",&n)&&n) {
		printf("The %d",n);
		if(n%10==1&&n%100!=11) printf("st ");
		else if(n%10==2&&n%100!=12) printf("nd ");
		else if(n%10==3&&n%100!=13) printf("rd ");
		else   printf("th ");
		printf("humble number is %d.\n",dp[n]);
	}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章