面试笔试题

  • 题意:

  • 特殊数字”是指只能被分解为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;
}

  

原文地址:https://www.cnblogs.com/mch5201314/p/11918585.html