題意:中文題誒~
思路:這道題和前面的51nod1009好像,直接套用那個演算法也是能ac的,不過我還是喜歡換個口味;
求a, b之間個數字出現的次數。可以由分治的思想,先求出他們在0~b出現的次數, 再求出在0~a-1出現的次數,前者減去後者即為答案;
然而如何求出0~x各個數字出現的次數我是看了一本書上的方法才會的,這裡直接給出**好了,隨便帶入一組資料也不難驗證其正確性,所以也就不多說啦。。。
**:
1 #include 2#define ll long long
3#define maxn 10
4using
namespace
std;
56 ll value=1; //
***value記錄當前的權值
7 ll vis[maxn]; //
***vis[i]儲存0到x中i出現的次數89
void
deal(ll n)
13 ll one=n%10; //
***one, ten分別表示當前n的個位和高位
14 n/=10
;15 ll ten=n;
16for(int i=0; i<=one; i++)
19while
(ten)
23for(int i=0; i<10; i++)
26 vis[0]-=value; //
***將第一位是0的情況排除
27 value*=10
;28 deal(n-1
);29}30
31int main(void)37
deal(b);
38 value=-1
;39 deal(a-1
);40
for(int i=0; i<10; i++)
43return0;
44 }
還是寫一下套用1009ac的**好了~
**:
1 #include 2#define ll long long
3using
namespace
std;45
ll deal(ll n, ll key)
11 ll gg=n%10
;12 ll num=x/(cnt*10
);13
if(ggif(gg==key)else
20 cnt*=10
;21 n/=10;22
}23return
ans;24}
2526
int main(void)32
for(ll i=0; i<10; i++)
35return0;
36 }
51nod1042 0到9的數量(數字dp)
這道題當時困擾了我很長時間,當時我做1的數量的時候是從前往後寫的,等寫這道題的時候從前往後用了3天還是沒做對,情況太多太複雜 主要也是因為我比較菜 下面附上 include include include using namespace std long long dp 20 long long p...
整數中X出現的次數 C
題目 對於給定的n,求出1 n範圍內x出現的次數。0 x 9 思路 這道題nlogn的演算法很容易想到。遍歷1 n的每個數,判斷每個數的每一位是否為1,計數即可。下面直接給出 include using namespace std int numberof1between1andn int n,in...
1 n 之間 數字x出現的次數
宣告 僅個人小記 輸入 n 整數,0 x 9 輸出 1 n 中 數字x出現的次數 include include using namespace std int main void endtime clock cout cnt endl cout time elpased double endtim...