日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

简单游戏(easygame)

發布時間:2023/12/10 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 简单游戏(easygame) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡單游戲(easygame)?\operatorname{簡單游戲(easygame)}(easygame)

題目鏈接:SSL比賽?1507?\operatorname{SSL比賽\ 1507}SSL?1507

題目

一天,小 R 準備找小 h 去游泳,當他找到小 h 時,發現小 h 正在痛苦地寫著一列數, 111222333……nnn ,于是就問小 h 痛苦的原因,小 h 告訴他,現在他要算 1..n1..n1..n 這些數里面, 111 出現的次數是多少,如 n=11n=11n=11 的時候,有 1,10,111,10,111,10,11 共出現 444111 ,現在給出 n,n,n, 你能快速給出答案么?

輸入

一行,一個整數 nnn

輸出

一個整數,表示 1..n1..n1..n111 出現的次數。

樣例輸入

11

樣例輸出

4

數據范圍

對于 30%30\%30% 的數據: n<=1000;n<=1000;n<=1000;
對于 100%100\%100% 的數據: n<=maxlongint;n<=maxlongint;n<=maxlongint;

思路

這道題是一道數學題,要分類討論。

我們一位一位的求:
對于個位,每十個這里就出現了 111111 ;對于十位,每百個這里就出現了 101010111 ;對于百位,沒千個就出現了 100100100111 。

那它前面組成的數字就是有多少個每一個,或者十個,百個,等等。
(想 233233233 ,對于十位,就有 222101010

接著就來看它這一位,可以發現,如果這一位是 000 ,就正常。如果這一位大于 111 ,就會多一個每一個,或者十個,百個,等等。

但是如果這一位等于 111 呢?
那我們發現,它后面組成的數字就是多了多少次 +1+1+1 。
為什么要加一呢?就是因為比如 101010 ,在看到十位的時候,雖然后面組成的數字是 000 ,但是可以看出十位出現了 111111 。因為 101010 里面十位是有一個 111 的。

代碼

#include<cstdio> #define ll long longusing namespace std;ll n, ans; ll more, times, sheng;int main() {scanf("%lld", &n);//讀入for (ll wei = 1; wei <= n; wei *= 10) {//枚舉每一位more = n % (wei * 10) / wei;//這一位times = n / (wei * 10);//它前面組成的數字sheng = n % wei;//它后面組成的數字if (more > 1) ans += times * wei + wei;else if (more == 1) ans += times * wei + sheng + 1;//分類討論else ans += times * wei;}printf("%lld", ans);//輸出return 0; }

總結

以上是生活随笔為你收集整理的简单游戏(easygame)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。