麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

1049. Counting Ones (30)

2019-11-14 08:51:46
字體:
來源:轉載
供稿:網友

1. 原題: https://www.patest.cn/contests/pat-a-PRactise/1049

2. 思路:

題意:輸出從1~N之間的所有整數中含有1的總個數。思路:數學邏輯題。需要枚舉,歸納出規律。不易想出來。首先,從1直接數的方法有些傻,拋棄掉。那么如何處理呢?不妨站在全局進行思考,我們無法準確知道1會出現在哪一位。那為何我們不從每一位出現1的次數進行累加不就是總次數呢。okay, 那么我們需要歸納每一位出現1的次數是多少。假設我們現在計算百位上為1的次數。比如一個數12033.1. 若當前位cur = 0, 顯然若百位為1,只與高位有關。比如 100~199, 1100~1199, 總數為12*100。即高位*位權。2. cur = 1, 如12133.顯然除了高位,還與低位有關。即12100~12133,低位有關時的總個數為 低位數+1.3. cur > 1, 如12233. 顯然與低位無關了,與高位及當前位有關,但可以把當前位累計到高位上,即 總個數為 (高位+1)*位權。以上就是一個規律的展示。

3. 源碼(已AC):

#include<iostream>using namespace std;int main(void){	//freopen("in.txt", "r", stdin);	int N, sum = 0;	cin >> N;	int wgt = 1;//位權初始1,表示從個位開始		while (N / wgt != 0)	{		int left = N / (wgt * 10);//表示高位數		int cur = N / wgt % 10;//當前位值		int right = N % wgt;//低位數值		if (cur == 0)//三種情況			sum += left * wgt;		else if (cur == 1)			sum += left * wgt + right + 1;		else			sum += (left + 1) * wgt;		wgt *= 10;//位權增加	}	cout << sum << endl;	return 0;}參考自: http://m.blog.csdn.net/article/details?id=38846057
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 美女在线视频一区二区 | 国产乱淫a∨片免费观看 | 国产88久久久国产精品免费二区 | 国产视频在线免费观看 | 国产精品久久久久国产精品三级 | 亚洲成人免费电影 | 国产91一区 | 欧美 中文字幕 | 中文字幕精品亚洲 | 久久sp| 巨乳毛片 | 香蕉成人在线观看 | 久久久国产精品视频 | 国产三级a三级三级 | 国产精品亚洲一区二区三区久久 | 午夜视频中文字幕 | 亚洲天堂成人在线 | 成人情欲视频在线看免费 | 美国一级免费视频 | 一区二区三高清 | v11av在线视频成人 | 欧美一级高清片在线 | 天天碰夜夜操 | 国产在线观看 | 免费一级毛片在线播放视频 | 欧美日本另类 | 欧美成人免费电影 | 久久成人免费观看 | va视频| 国产精品久久久久久久av三级 | 日本羞羞的午夜电视剧 | 亚洲成人第一页 | 久久最新网址 | 欧美一级做一级爱a做片性 91在线视频观看 | 手机视频在线播放 | 久久影院国产精品 | 成人不卡| 性欧美在线视频 | 免费a级毛片大学生免费观看 | 一本色道久久99精品综合蜜臀 | 深夜毛片免费看 |