// UVa 443 - Humble Numbers
#include <iostream>
#include <map>
#include <queue>
#include <string>
using namespace std;
#define integer unsigned long long
struct humble {
integer h;
};
bool operator <(humble a, humble b) {
return a.h > b.h;
}
int main() {
map<integer, bool> yet;
integer sol[5843];
priority_queue<humble> q;
humble one = { 1 };
q.push(one);
for (int i = 1; i <= 5842; i++) {
integer now = q.top().h;
sol[i] = now;
q.pop();
integer next = now * 2;
if (!yet[next]) {
yet[next] = true;
humble humb = { next };
q.push(humb);
}
next = now * 3;
if (!yet[next]) {
yet[next] = true;
humble humb = { next };
q.push(humb);
}
next = now * 5;
if (!yet[next]) {
yet[next] = true;
humble humb = { next };
q.push(humb);
}
next = now * 7;
if (!yet[next]) {
yet[next] = true;
humble humb = { next };
q.push(humb);
}
}
int n;
while ((cin >> n) && n) {
int m = n % 10;
string suffix = "th";
switch (m) {
case 1:
suffix = "st";
break;
case 2:
suffix = "nd";
break;
case 3:
suffix = "rd";
break;
}
if (n % 100 == 11 || n % 100 == 12 || n % 100 == 13)
suffix = "th";
cout << "The " << n << suffix << " humble number is " << sol[n] << ".\n";
}
return 0;
}
Monday, June 8, 2015
UVa 443 - Humble Numbers
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment