您的位置:首页 > 其它

zoj1095 Humble Numbers(DP)

2011-08-17 13:24 387 查看
/*
简单DP:每次将求得的值分别乘以2,3,4,7,然后利用插入排序插入到数据序列中
保证数据的递增序,最终到达结束状态。
*/

View Code

#include <iostream>
#include <cstdlib>
#include <stdio.h>

using namespace std;

long long data[ 6000 ] = {0,1,2,3,5,7};

bool bs( int l, int h, long long key )
{
while ( l <= h ) {
int mid = (l+h)/2;
if ( data[ mid ] == key )
return true;
else if ( data[ mid ] > key )
h = mid-1;
else l = mid+1;
}
return false;
}

int main()
{
int save = 6,move = 2;
while ( move < save && save < 6000 ) {
for ( int i = 2 ; i <= move ; ++ i ) {
data[ save ] = data[ move ]*data[ i ];
if ( data[ save ] <= 2000000000 && !bs( 1, save-1, data[ save ] ) ) {
int now = save ++;
while ( data[ now ] < data[ now-1 ] ) {
swap( data[ now ], data[ now-1 ] );
-- now;
}
}
}
++ move;
}
int n;
while ( scanf("%d",&n) && n ) {
cout << "The " << n;
if ( n%10 == 1 && 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";
cout << " humble number is " << data[ n ] << "." << endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: