zoukankan      html  css  js  c++  java
  • Preface Numbering

    链接

    分析:先打表需要用到的罗马数字,然后暴力转换,最后统计一下即可

     1 /*
     2     PROB:preface
     3     ID:wanghan
     4     LANG:C++
     5 */
     6 #include "iostream"
     7 #include "cstdio"
     8 #include "cstring"
     9 #include "string"
    10 #include "map"
    11 using namespace std;
    12 const int maxn=4000;
    13 char s[]={'I','V','X','L','C','D','M'};
    14 int  h[]={1,2,3,4,5,6,7,8,9,10,20,30,40,50,60,70,80,90,100,200,300,400,500,600,700,800,900,1000,2000,3000};
    15 int n;
    16 struct Node{
    17     int x;
    18     string str;
    19 };
    20 Node p[maxn];
    21 map<int,string> mp;
    22 void init(){
    23     mp[1]="I",mp[2]="II",mp[3]="III",mp[4]="IV",mp[5]="V",mp[6]="VI",mp[7]="VII",mp[8]="VIII",mp[9]="IX";
    24     mp[10]="X",mp[20]="XX",mp[30]="XXX",mp[40]="XL",mp[50]="L",mp[60]="LX",mp[70]="LXX",mp[80]="LXXX",mp[90]="XC";
    25     mp[100]="C",mp[200]="CC",mp[300]="CCC",mp[400]="CD",mp[500]="D",mp[600]="DC",mp[700]="DCC",mp[800]="DCCC",mp[900]="CM";
    26     mp[1000]="M",mp[2000]="MM",mp[3000]="MMM";
    27 }
    28 string solve(int num){
    29     string res="";
    30     while(num){
    31         int pos=-1;
    32         for(int i=29;i>=0;i--){
    33             if(num>=h[i]){
    34                 pos=i; break;
    35             }
    36         }
    37         int mod=num/h[pos];
    38         for(int i=1;i<=mod;i++){
    39             num-=h[pos];
    40             res+=mp[h[pos]];
    41         }
    42         //num-=h[pos];
    43         //res+=mp[h[pos]];
    44     }
    45     return res;
    46 }
    47 map<char,int>mr;
    48 int main()
    49 {
    50     freopen("preface.in","r",stdin);
    51     freopen("preface.out","w",stdout);
    52     cin>>n;
    53     init();
    54     for(int i=1;i<=n;i++){
    55         p[i].x=i;
    56         p[i].str=solve(i);
    57         //cout<<i<<": ";
    58         //cout<<p[i].str<<endl;
    59     }
    60     for(int i=1;i<=n;i++){
    61         for(int j=0;j<p[i].str.length();j++){
    62             mr[p[i].str[j]]++;
    63         }
    64     }
    65     for(int i=0;i<7;i++){
    66         if(mr[s[i]]==0)  continue;
    67         else{
    68             cout<<s[i]<<" "<<mr[s[i]]<<endl;
    69         }
    70     }
    71     return 0;
    72 }
    View Code
  • 相关阅读:
    leetcode 18 4Sum
    leetcode 71 Simplify Path
    leetcode 10 Regular Expression Matching
    leetcode 30 Substring with Concatenation of All Words
    leetcode 355 Design Twitte
    leetcode LRU Cache
    leetcode 3Sum
    leetcode Letter Combinations of a Phone Number
    leetcode Remove Nth Node From End of List
    leetcode Valid Parentheses
  • 原文地址:https://www.cnblogs.com/wolf940509/p/7193815.html
Copyright © 2011-2022 走看看