usaco Preface Numbering 序言页码
生活随笔
收集整理的這篇文章主要介紹了
usaco Preface Numbering 序言页码
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Preface Numbering 序言頁碼
一類書的序言是以羅馬數字標頁碼的.傳統羅馬數字用單個字母表示特定的數值,一下是標準數字
表:
I 1 L 50 M 1000
V 5 C 100
X 10 D 500
最多 3 個可以表示為 10n 的數字(I,X,C,M)可以連續放在一起,表示它們的和:
III=3
CCC=300
可表示為 5x10n 的字符(V,L,D)從不連續出現.
除了下一個規則,一般來說,字符以遞減的順序接連出現:
CCLXVIII = 100+100+50+10+5+1+1+1 = 268
有時,一個可表示為 10^n 的數出現在一個比它大的數前(I 在 V 或 X 前面,X 在 L 或 C 前面,等等).
在這種情況下,數值等于后面的那個數減去前面的那個數:
IV = 4
IX = 9
XL = 40
像XD, IC, 和XM這樣的表達是非法的,因為前面的數比后面的數小太多.對于XD(490的錯誤表達),
可以寫成 CDXC; 對于 IC(99 的錯誤表達),可以寫成 XCIX; 對于 XM(990 的錯誤表達),可以寫成
CMXC.
給定 N(1 <= N < 3,500), 序言的頁碼數,請統計在第 1 頁到第 N 也中,有幾個 I 出現,幾個 V 出現,
等等 (從小到大的順序).不要輸出并沒有出現過的字符.
比如 N = 5, 那么頁碼數為: I, II, III, IV, V. 總共有 7 個 I 出現,2 個 V 出現.
PROGRAM NAME: preface
INPUT FORMAT
一個整數 N.
SAMPLE INPUT (preface.in)
5
OUTPUT FORMAT
每行一個字符和一個數字 k,表示這個字符出現了 k 次.字符必須按數字表中的遞增順序輸出.
SAMPLE OUTPUT (preface.out)
I 7
一類書的序言是以羅馬數字標頁碼的.傳統羅馬數字用單個字母表示特定的數值,一下是標準數字
表:
I 1 L 50 M 1000
V 5 C 100
X 10 D 500
最多 3 個可以表示為 10n 的數字(I,X,C,M)可以連續放在一起,表示它們的和:
III=3
CCC=300
可表示為 5x10n 的字符(V,L,D)從不連續出現.
除了下一個規則,一般來說,字符以遞減的順序接連出現:
CCLXVIII = 100+100+50+10+5+1+1+1 = 268
有時,一個可表示為 10^n 的數出現在一個比它大的數前(I 在 V 或 X 前面,X 在 L 或 C 前面,等等).
在這種情況下,數值等于后面的那個數減去前面的那個數:
IV = 4
IX = 9
XL = 40
像XD, IC, 和XM這樣的表達是非法的,因為前面的數比后面的數小太多.對于XD(490的錯誤表達),
可以寫成 CDXC; 對于 IC(99 的錯誤表達),可以寫成 XCIX; 對于 XM(990 的錯誤表達),可以寫成
CMXC.
給定 N(1 <= N < 3,500), 序言的頁碼數,請統計在第 1 頁到第 N 也中,有幾個 I 出現,幾個 V 出現,
等等 (從小到大的順序).不要輸出并沒有出現過的字符.
比如 N = 5, 那么頁碼數為: I, II, III, IV, V. 總共有 7 個 I 出現,2 個 V 出現.
PROGRAM NAME: preface
INPUT FORMAT
一個整數 N.
SAMPLE INPUT (preface.in)
5
OUTPUT FORMAT
每行一個字符和一個數字 k,表示這個字符出現了 k 次.字符必須按數字表中的遞增順序輸出.
SAMPLE OUTPUT (preface.out)
I 7
V 2
看到題依舊懵逼不知如何下手,無奈之下只好使用我最擅長的百度了。(其實也是自己難不愿多想,看到題就想百度)。
原來是有規律的。個位,十位,百位上都是出現連續的三個而且次數相同比如0,1,2,3,1,0,1,2,3,1,........代碼中注釋。
然后每找到一位上的數字把他上面的三個字母統計下來就行了,佩服寫出這個代碼的人規律用的很嫻熟。
/*
ID:jinbo wu
LANG:C++
TASK:preface
*/
#include<bits/stdc++.h>
using namespace std;
char s[8]={' ','I','V','X','L','C','D','M'};
int a[4][10]={0,0,0,0,0,0,0,0,0,0,0,1,2,3,1,0,1,2,3,1,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1};
int ans[11];/*('','I','II','III','IV','V','VI','VII','VIII','IX'),//個位,0,1,2,...,9('','X','XX','XXX','XL','L','LX','LXX','LXXX','XC'),//十('','C','CC','CCC','CD','D','DC','DCC','DCCC','CM'),//百('','M','MM','MMM','','','','','',''));//千
*/
int main()
{int n;freopen("preface.in","r",stdin);freopen("preface.out","w",stdout);scanf("%d",&n);for(int i=1;i<=n;i++){int t=i;for(int j=0;j<=3;j++){for(int k=1;k<=3;k++)ans[j*2+k]+=a[k][t%10];t/=10;if(t==0)break;} }for(int i=1;i<=7;i++){if(ans[i]) printf("%c %d\n",s[i],ans[i]);}
}
總結
以上是生活随笔為你收集整理的usaco Preface Numbering 序言页码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ccf 最优灌溉(prime模板)
- 下一篇: usaco ★Subset Sums 集