您的位置:首页 > 其它

HDOJ1058(Humble Numbers)dp

2009-03-24 19:43 337 查看
#include <iostream>

using namespace std;

const int N = 5850;

__int64 humble
= {0, 1};

void makeHumbleNum()

{

int p2, p3, p5, p7;

__int64 minv;

p2 = p3 = p5 = p7 = 1;

for(int i = 2; i <= 5842; i++)

{

minv = humble[p2] * 2;

if(humble[p3] * 3 < minv) minv = humble[p3] * 3;

if(humble[p5] * 5 < minv) minv = humble[p5] * 5;

if(humble[p7] * 7 < minv) minv = humble[p7] * 7;

//-----------------------------------------------

if(minv == humble[p2] * 2) p2++;

if(minv == humble[p3] * 3) p3++;

if(minv == humble[p5] * 5) p5++;

if(minv == humble[p7] * 7) p7++;

humble[i] = minv;

}

}

int main()

{

int n;

makeHumbleNum();

while(cin>>n && n)

{

cout<<"The "<<n;

if(n==11 || n==12 || n==13)

cout<<"th";

else if( n%10==1 && n%100 !=11)//注意n%100 !=11这个条件

cout<<"st";

else if( n%10==2 && n%100 !=12)

cout<<"nd";

else if( n%10==3 && n%100 !=13)

cout<<"rd";

else

cout<<"th";

printf(" humble number is %I64d.\n",humble
);

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: