#洛谷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/其實**2確實是湊出來的tut
//但還是完結撒花~~
因為是腦洞做法的所以如果有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 可以在同乙個格仔內 當他們相...