洛谷 P1980 計數問題

2021-10-03 13:39:52 字數 1123 閱讀 3569

題目描述

試計算在區間 1 到 n 的所有整數中,數字x(0≤x≤9)共出現了多少次?例如,在 1到 11 中,即在 1,2,3,4,5,6,7,8,9,10,11 中,數字 1 出現了 4 次。

輸入格式

2個整數n,x之間用乙個空格隔開。

輸出格式

1個整數,表示x出現的次數。

輸入輸出樣例

輸入樣例#1

11 1
輸出樣例#1
4
說明/提示

對於 100%的資料,1≤n≤1,000,000,0≤x≤9。

題目思路

nlog(n)解法

#include#define ll long long int

using namespace std;

int main()

while(t);

}printf("%lld",sum);

return 0;

}

log(10n)解法

如:n=728,x=7

可以按照這樣的思路:

個位7:73個 7,17,...,727

十位7:70個 70~79,170~179,...,670~679

百位7:29個 700~728

答案是172

#includeusing namespace std;

int main()

{ int n,x,m=1,ans=0;

scanf("%d%d",&n,&x);

while(m<=n)

{int a=n/(m*10),b=n/m%10,c=n%m; //a,b,c為n的三部分,求哪一位x的個數,b就為那一位數,a為b左邊的數,c為b右邊的數,如求1~728中十位7的個數,則a=7,b=2,c=8

if(x)

{if(b>x) ans+=(a+1)*m; //如果b>x,說明有(a+1)*m個x(如求1~728中個位7的個數,則為(72+1)*1=73)

if(b==x) ans+=a*m+c+1; //如果b=x,說明有a*m+c+1個x(如求1~728中百位7的個數,則為0*100+28+1=29)

if(b

(洛谷)P1980 計數問題 提交

涉及變數很多的程式一定要寫清注釋 include using namespace std int main b b 10 cout num endl return 0 2.用函式的方式 include using namespace std void js int n,int x b b 10 co...

P1980 計數問題

題目描述 試計算在區間 1 到 n 的所有整數中,數字 x 0 x 9 共出現了多少次?例如,在 1 到 11 中,即在 1 2 3 4 5 6 7 8 9 10 11 中,數字 1 出現了 4 次。輸入輸出格式 輸入格式 輸入檔名為 count.in。輸入共 1 行,包含 2 個整數 n x,之間...

P1980 計數問題

試計算在區間 11 到 nn的所有整數中,數字x 0 x 9 x 0 x 9 共出現了多少次?例如,在 11到1111中,即在 1,2,3,4,5,6,7,8,9,10,111,2,3,4,5,6,7,8,9,10,11 中,數字 11 出現了 44 次。輸入格式 22個整數n,xn,x,之間用乙個...