mysql dp.cal 显示汉子_计算1到N中各个数字出现的次数 --数位DP
題意:給定一個數n,問從1到n中,0~9這10個數字分別出現了多少次。比如366這個數,3出現了1次,6出現了2次。
題解:《劍指offer》P174;《編程之美》P132 都給出了統計數字1的O(log(n))的解法。把他們進行改進就得到了這個問題的答案。
下面這個代碼是我改的劍指offer的,也有類似編程之美的:傳送門。
//《劍指offer》P174
#include
using namespace std;
int pow1(int n,int len)//注意算的時候不要用math里的pow 會產生誤差
{
int ans=;
while(len--) ans*=n;
return ans;
}
int cal(char *c,int i)
{
int len=strlen(c);
int f=*c-'',g=*(c+)-'';
if(len==&&(f
if(len==&&f>=i) return ;
int a1=,a2=,a3=;
if(i==||f
else if(f>i) a1=pow1(,len-);
else if(f==i) a1=atoi(c+)+;
a2=f*(len-)*pow1(,len-);
if(g==&&i==) a2=a2-pow1(,len-)+atoi(c+)+;
a3=cal(c+,i);
return a1+a2+a3;
}
int solve(int n,int i)
{
char c[];
sprintf(c,"%d",n);
return cal(c,i);
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF){
for(int i=;i
printf("%d%c",solve(n,i),i==?'\n':' ');
}
return ;
}
官方標程:
#include
using namespace std;
vector solve(int n) {
vector res(, );
if(!n) return res;
if(n % < ) {
res = solve(n - );
while(n) {
res[n % ]++;
n /= ;
}
return res;
}
res = solve(n / );
for(int i = ; i < ; i++) res[i] = res[i] * + n / + (i > );
return res;
}
int main() {
int n;
cin >> n;
vector ans = solve(n);
for(int i = ; i < ans.size(); i++) {
i == ? cout << ans[i] : cout << " " << ans[i];
}
return ;
}
C語言:統計整型變量m中各數字出現的次數,-去掉一個最高分和一個最低分,然后求平均值,(注意最低分和最高分可能有多個數并列)
//統計整型變量m中各數字出現的次數,并存放在數組a中,其中,a[0]存放0出現的次數,a[1]存放1出現的次數. #include ]) { int i; ; i&l ...
計算1到N中包含數字1的個數
轉自:http://pandonix.iteye.com/blog/204840?Mark N為正整數,計算從1到N的所有整數中包含數字1的個數.比如,N=10,從1,2...10,包含有2個數字1. ...
筆試算法題(30):從已排序數組中確定數字出現的次數 &; 最大公共子串和最大公共序列(LCS)
出題:在已經排序的數組中,找出給定數字出現的次數: 分析: 解法1:由于數組已經排序,所以可以考慮使用二分查找確定給定數字A的第一個出現的位置m和最后一個出現的位置n,最后m-n+1就是A出現的次數: ...
51nod 1009 - 數字1的數量 - [數位DP][模板的應用以及解釋]
題目鏈接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1009 基準時間限制:1?秒 空間限制:131072?KB 給 ...
51Nod 1009 數字1的個數 | 數位DP
題意: 小于等于n的所有數中1的出現次數 分析: 數位DP 預處理dp[i][j]存 從1~以j開頭的i位數中有幾個1,那么轉移方程為: if(j == 1) dp[i][j] = dp[i-1][9 ...
1009 數字1的數量 數位dp
1級算法題就這樣了,前途渺茫啊... 更新一下博客,我剛剛想套用數位dp的模板,發現用那個模板也是可以做到,而且比第二種方法簡單很多 第一種方法:我現在用dp[pos][now]來表示第pos位數字為 ...
51nod 1009 數字1的數量 數位dp
1009?數字1的數量 基準時間限制:1?秒 空間限制:131072?KB ? 給定一個十進制正整數N,寫下從1開始,到N的所有正數,計算出其中出現所有1的個數. ? 例如:n = 12,包含了5個1 ...
nyoj281 整數中的1(二) 數位DP
和整數中的1一毛一樣.就是輸入時改了一下罷了. AC代碼: #include const int maxn = 35; int w[maxn], h[maxn]; void ...
51nod 1042 數字0-9的數量 數位dp
1042?數字0-9的數量 基準時間限制:1?秒 空間限制:131072?KB 分值:?10?難度:2級算法題 ?收藏 ?關注 給出一段區間a-b,統計這個區間內0-9出現的次數. ? 比如 10-1 ...
隨機推薦
js繼承方式
1.原型鏈 實現的本質是重寫原型對象,代之以一個新類型的實例: 給原型添加方法的代碼硬頂放在替換原型的語句之后: 不能使用對象字面量查收能見原型方法,這樣會重寫原型鏈. 缺點:包含引用類型值的原型屬性 ...
常用jar包用途
jar包 用途?axis.jar SOAP引擎包?commons-discovery-0.2.jar 用來發現.查找和實現可插入式接口,提供一些一般類實例化.單件的生命周期管理的常用方法.?jaxrp ...
cocos2d-x之初試內存管理機制
bool HelloWorld::init() { if ( !Layer::init() ) { return false; } Size visibleSize = Director::getIn ...
#if...#endif的用法總結
在寫到? pwm音階程序的時候,在代碼中有#if...#endif的用法問題,相關音階的代碼如下: /************************************************* ...
【HDOJ】1606 Excuses, Excuses!
簡單字符串. #include #include #define MAXLEN 105 #define MAXN 25 char keys ...
mvc Action上面加 [HttpPost]
mvc ?Action上面加?[HttpPost] ?意思就是這個action只能響應post請求. 如果發get請求這里是沒有響應的
通過ViewPager 實現圖片輪播
通過ViewPager 實現圖片輪播 首先來個效果圖 布局文件: LinearLayout 用來存放下方的幾個小白點. <?xml version="1.0" encodin ...
跨年操作--new Date()
//時間在2017/12/31 17:00 --- 2018/1/1 06:00區間,提示用戶無法操作公告. //time.js (function(){ var date = new Date(); ...
bzoj千題計劃236:bzoj2300: [HAOI2011]防線修建
http://www.lydsy.com/JudgeOnline/problem.php?id=2300 維護動態凸包,人懶用的set 用叉積判斷,不要用斜率 #include ...
硬盤img鏡像備份工具
linux下使用dd,Windows下使用WinImage,不過dd使用的比較多.
總結
以上是生活随笔為你收集整理的mysql dp.cal 显示汉子_计算1到N中各个数字出现的次数 --数位DP的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [云炬创业基础笔记]第七张创业资源测试1
- 下一篇: [云炬创业基础笔记]第七张创业资源测试1