ACM 关于521
關于521
時間限制:1000?ms ?|? 內存限制:65535?KB 難度:2- 描述
-
Acm隊的流年對數學的研究不是很透徹,但是固執的他還是想一頭扎進去。
瀏覽網頁的流年忽然看到了網上有人用玫瑰花瓣拼成了521三個數字,頓時覺得好浪漫,因為每個男生都會不經意的成為浪漫的制造者。此后,流年走到哪里都能看到5、2、1三個數字,他怒了,現在他想知道在連續的數中有多少數全部包含了這三個數字。例如12356就算一個,而5111就不算。特別的,如果他看到了521三個數連續出現,會特別的憤怒。例如35210。
- 輸入
- 多組測試數據:
一行給定兩個數a,b(0<a,b<1000000),表示數字的開始和結束。 輸出 - 一行顯示他想要知道的數有幾個及顯示有多少個數字令他特別的憤怒。用空格隔開。 樣例輸入
-
200 500 300 900 1 600
樣例輸出 -
Case 1:2 0 Case 2:2 1 Case 3:6 1
用打表法解決,本題將整數轉換成字符串,然后查找字符串判斷是否有5,2,1,521
題目感覺略坑,直接用stringstrean去將整數轉換成字符串超時,但用sprintf可以通過#include<iostream> #include <string> #include <sstream> #include <cstdio> #include <cstdlib> using namespace std;int table[1000000]={0},table521[1000000]={0};void make_table(){for(int i = 125; i < 1000000; ++ i){table[i]=table[i-1];table521[i] = table521[i-1];char c[10];sprintf(c,"%d",i);/*stringstream ss;ss << i;string num(ss.str());*/string num(c);if(num.find('5')!= string::npos && num.find('2')!=string::npos && num.find('1')!=string::npos){table[i]++;if(num.find("521")!=string::npos) table521[i]++;}} }int main(){make_table();int a,b,cnt = 0;while(cin >> a >> b){printf("Case %d:%d %d\n",++cnt,table[b]-table[a-1],table521[b] - table521[a-1]);} }
?
?
轉載于:https://www.cnblogs.com/xiongqiangcs/p/3650201.html
總結
- 上一篇: 呵护着我是什么歌呢?
- 下一篇: 螫字开头的四字成语有哪些?