国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

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

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
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 平罗县| 雷山县| 敖汉旗| 江口县| 元氏县| 桃源县| 平山县| 江陵县| 襄汾县| 京山县| 隆昌县| 朝阳县| 大足县| 商南县| 保德县| 阳谷县| 通州区| 广州市| 海宁市| 宣威市| 迭部县| 阳朔县| 台州市| 浑源县| 凌海市| 禄丰县| 太仓市| 五指山市| 丰原市| 遂川县| 贵阳市| 洛川县| 英超| 南陵县| 永兴县| 芦溪县| 彰化市| 柳江县| 荔波县| 安福县| 辰溪县|