洛谷P1590 失蹤的7

2021-08-11 12:31:40 字數 1776 閱讀 6184

#洛谷p1590 失蹤的7

##題目描述

遠古的pascal人也使用阿拉伯數字來進行計數,但是他們又不喜歡使用7,因為他們認為7是乙個不吉祥的數字,所以pascal數字8其實表示的是自然數中的7,18表示的是自然數中的16。下面計算一下,在正整數n範圍以內包含有多少個pascal數字。

##輸入輸出格式

###輸入格式:

第一行為正整數t,接下來t行,每行乙個正整數n(≤2^32-1)。

輸入的是pascal數字

###輸出格式:

對於每個正整數n,輸出n以內的pascal數的個數。

##輸入輸出樣例

###輸入樣例#1:210

20###輸出樣例#1:918

雖然是個入門題但是不想寫暴力,

於是開始xjb搞事情什麼的qwq

所以魚塊地發題解了,

以下用了一種十分奇怪的解法,叫做:進製轉換!!

首先,pascal數字是由0,1,2,3,4,5,6,8,9 九個數字組成的

所以我們很(不)容易想到pascal數字可以近似的看成一種九進製數

所以題面:

在正整數n範圍以內包含有多少個pascal數字

就可以看作:

讀入乙個pascal數 ,轉為普通數字

即讀入乙個九進製數,轉為十進位制(我的理解qwq)

//當然還是滿十進一但是7消失了qwq

所以我寫了這樣的**

**1:

//九進製轉十進位制 

#include

#include

using

namespace std;

long

long k,ans=0;

int t,i;

char a[

1001];

intmain()

}

然後很容易發現出了bug,即wa了tut

bug是什麼呢??

當我們把題目抽象成 九進製轉十進位制 時,是把1~n中所有含數字9的數字判定為非pascal數,而不是題目要求的7

就是當讀入的資料中含有7,8,9時,應該被判定為非pascal數的含數字7的數被判定為了pascal數

而當讀入資料中不含7,8,9時,7的出現就和9的出現相匹配

即 9所以我們需要乙個特判,將多計算的pascal數減去qwq

**2:

#include

#include

using

namespace std;

long

long k,s=

1,sum=

0,ans=0;

int t,i,j;

char a[

1001];

intmain()

for(i=k-

1;i>=0;

--i)

/* 減去應該被消去卻【劃掉】因進製轉換的不合理性【劃掉】被保留的數字的個數:

如果乙個數的個位是8或9,就少減了9^0個7

如果乙個數的十位是8或9,就少減了9^1個7

如果乙個數的百位是8或9,就少減了9^2個7

...以此類推

是個比較明顯的找規律,不想寫證明qwq

*/for(i=

0;i++i) ans=ans*

9+a[i]

-'0'

; cout

//但還是完結撒花~~

因為是腦洞做法的所以如果有dalao證明或證偽求聯絡我qwq

洛谷 P1590 失蹤的7

時間限制 1.00s 記憶體限制 125.00mb 遠古的pascal人也使用阿拉伯數字來進行計數,但是他們又不喜歡使用7,因為他們認為7是乙個不吉祥的數字,所以pascal數字8其實表示的是自然數中的7,18表示的是自然數中的16。下面計算一下,在正整數n範圍以內包含有多少個pascal數字。第一...

洛谷題解P1590 失蹤的7

題目描述 遠古的pascal人也使用阿拉伯數字來進行計數,但是他們又不喜歡使用7,因為他們認為7是乙個不吉祥的數字,所以pascal數字8其實表示的是自然數中的7,18表示的是自然數中的16。下面計算一下,在正整數n範圍以內包含有多少個pascal數字。輸入格式 第一行為正整數t,接下來t行,每行乙...

洛谷刷題7 抓牛(P1518)

兩隻牛逃跑到了森林裡。farmer john 開始用他的專家技術追捕這兩頭牛。你的任務是模擬他們的行為 牛和 john 追擊在 10 10 的平面網格內進行。乙個格仔可以是 乙個障礙物,兩頭牛 它們總在一起 或者 farmer john。兩頭牛和 farmer john 可以在同乙個格仔內 當他們相...