面试笔试题
-
题意:
-
特殊数字”是指只能被分解为2,3,7的乘积的数字。“特殊数字”序列为1, 2, 3, 4, 6, 7, 8, 9, 12, 14, ...展示了前10个“特殊数字”。按照惯例,1也是“特殊数字”。给定整数n,写一个程序,找到序列中,第n个“特殊数字”。如:n=9,找到“特殊数字”序列中第9位数字,也就是输出12。
输入:
每一行包含一个正整数,n (n <= 1500)。如果输入的一行为0,则输入终止。
输出:
对于每一行输入,输出“特殊数字”。注意不要解析输入为0的行
示例:
输入:
1
2
9
0
输出:
1
2
12
-
分析:
- n <= 1500 直接把该范围的结果全部枚举,然后排序即可
不过需要注意2的幂次多余3的幂次多余7的幂次
代码:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
vector<ll> v;
const ll up = 1e18;
ll fpow(ll a, ll b)
{
ll cnt = 1;
while(b)
{
if(b&1)
cnt *= a;
b >>= 1;
a *= a;
}
return cnt;
}
void init()
{
for(int i = 0;i < 30;i++)
for(int j = 0;j < 20;j++)
for(int k = 0;k < 10;k++)
{
ll cur = fpow(2,i)*fpow(3,j)*fpow(7,k);
if(cur < 0) continue;
v.push_back(cur);
}
}
int main()
{
init();
sort(v.begin(),v.end());
int n;
while(cin >> n && n)
{
cout << v[n-1] << endl;
}
return 0;
}

浙公网安备 33010602011771号