SDUT OJ 1704 數字統計問題

2021-06-26 21:55:34 字數 1066 閱讀 1334

sdut oj 1704 數字統計問題

昨天晚上學弟問了oj上這個題,群裡說不清楚,就寫個解題報告吧。

題目大意:

中文題目,就不翻譯了-。-

解題思路:

不知道算不算乙個典型的數字dp,反正有點那個意思,感覺確實也可以用記憶話搜尋,兩個差不多的意思。

我找了一下,這個問題好像是演算法設計與實驗題解上面的一道題,別的oj上沒有,所以就在自己oj上做了。

大體的思路就是,對於乙個數字,比如1342,想要求出每乙個數字出自出現的次數,

對於乙個n位的十進位制數,從乙個n位十進位制數的由低到高的第i個數字上,總是連續出現10^i個0,然後是10^i個1……一直到10^i個9,9之後又是連續的10^i個0,這樣迴圈出現。找到這個規律,就可以在常數時間內算出第i個數字上每個數字出現的次數。而在第i個數字上,最後再把前導0的數量去掉就是最後要的答案了。

這樣最大的時間複雜度是數字位數,也就是log10(n)的複雜度,所以就不會超時了,最後跑了0ms。

吐槽一下宿舍的網,實在是太卡了,寫個部落格都這麼費勁。。。。。真蛋疼。。。

具體的可以看**,**中會有部分解釋:

#include #include int a[10], ans[10], len;

char s[10];

int main()

int n = 0;

scanf("%s", s);///以字串輸入 便於統計長度

len = strlen(s);

for(int i = 0; i < len; ++i)

// printf("%d\n", n);

memset(ans, 0, sizeof(ans));

for(int i = 0; i < len; ++i)

while(j < 10)

ans[0] -= a[len-i-1]; ///去掉前導零的數目

// printf("%d\n", ans[0]);

}for(int i = 0; i < 10; ++i)

return 0;

}

數列求和 sdut oj

time limit 1000ms memory limit 32768kb problem description 數列求和是一類常見的問題,本題有一定的代表性 求s a aa aaa aaaa aa aa n位 其中,a的值由鍵盤輸入,位數n也由鍵盤輸入。input 第一行輸入a的值 第二行輸入...

簡單計算 sdut oj

time limit 1000ms memory limit 65536kb problem description 接受從鍵盤輸入的n個整數,輸出其中的最大值 最小值和平均值 平均值為整除的商 input 第一行乙個正整數n n 100 第二行有n個用空格隔開的整數ti 1 i n,0 ti 10...

簡單編碼 sdut oj

time limit 1000ms memory limit 65536kb problem description 將一串文字譯成密碼,密碼的規律是 將原來的小寫字母全部翻譯成大寫字母,大寫字母全部翻譯成小寫字母,數字的翻譯規律如下 0 9 1 8 2 7 3 6 4 5 5 4 6 3 7 2 ...