藍橋杯:第幾個幸運數(暴力枚舉法)

1、問題描述

到x星球旅行的遊客都被髮給一個整數,作爲遊客編號。
x星的國王有個怪癖,他只喜歡數字3,5和7。
國王規定,遊客的編號如果只含有因子:3,5,7,就可以獲得一份獎品。

我們來看前10個幸運數字是:
3 5 7 9 15 21 25 27 35 45
因而第11個幸運數字是:49

小明領到了一個幸運數字 59084709587505,他去領獎的時候,人家要求他準確地說出這是第幾個幸運數字,否則領不到獎品。

請你幫小明計算一下,59084709587505是第幾個幸運數字。

需要提交的是一個整數,請不要填寫任何多餘內容。

2、我對這個問題的看法
  這個問題可以用暴力枚舉法(多重for循環)解決。題目中要求那個數的因子只能含有3、5、7,也就是說那個數是 3i5j7r3^{i}*5^{j}*7^{r} 這種形式的,所以可以用三層for循環來實現 3i5j7r3^{i}*5^{j}*7^{r} 這樣的形式。
  :這個題目要注意到數的範圍很大,故要用long long型。

3、解題代碼

#include<iostream> 
using namespace std;

int main()
{
	int c=0;
	long long n;                              //n很大,要用long long型; 
	cin>>n;
	for(long long i=1;i<=n;i=3*i)             //實現 3^i; 
	{
		for(long long j=1;i*j<=n;j=5*j)       //實現 3^i*5^j; 
		{
			for(long long r=1;i*j*r<=n;r=7*r) //實現 3^i*5^j*7^r; 
				++c;                          //計算因子; 
		}
	}
	cout<<c-1;                              //去掉 i=j=r=1的情況; 
	return 0;
}

4、運行結果
  輸入數據:59084709587505
  應輸出:1905
在這裏插入圖片描述

運行環境:DEV c++

至此,整個題目解答完畢!!!

 結語:以上就是我對這個問題的理解、解法,可能存在着更好、更簡潔的解法代碼,希望大家提出來,我們一起討論,交換看法,共同進步。若上述代碼中存在問題,望大家指正,謝謝大家看到結尾。(∩^∩)

奮鬥的2351

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章