[找规律][模拟]罗马数字

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[找规律][模拟]罗马数字相关的知识,希望对你有一定的参考价值。

贴一个洛谷的链接吧。  

tvvj题号是1070

思考

1 A 2 AA 3 AAA 4 AB 5 B 6 BA 7 BAA 8 BAAA 9 AC 无论个位十位百位千位 上面的数字总是会出现这样的规律

那么这道题就是暴力模拟题目~

举个例子

255 CC L V

268 CC LX VIII

278 CC LXX VIII

289 CC LXXX IX

299 CC XC IX

发现了规律了没有?

9是一类 4是一类 5-8一类 1-3一类 那么思路就出现了

先判断个位上面的数 如果是九 那么一定是IX 这时有个问题就是不能直接 ans[1]++ ans[3]++ 因为十位上的9就是XC了

所以要加个 t 作为标志值 判断是在个位(t=1)还是十位(t=2)还是百位(t=3)还是千位(t=4)(暂时看不懂继续往下看)

先讨论下 (假设数组大小为7 当然你可以100 200)

5的情况: 个位是5 那么一定是V

十位是5 那么一定是L

百位是5 那么一定是D

在没有千位是5的情况下,V L D 只会在是5的情况出现 其余都不可能(多写几个数字去看)

所以 个位的5 就是 num[1] 十位的5就是num[2] 百位的5就是num[3] 即num[t] 当然你也可以写num[t+100] num[t+200] 只要没有矛盾情况随便写

9的情况: 个位是9 那么一定是IX

十位是9 那么是 XC

百位是9 那么是 CM

这里只剩下 4 5 6 7可以取 这里为了方便 因为 IX XC CM 是相邻的两个数 所以 num[t+3] num[t+4]

这里看一下 因为个位9 囊括了 I 所以I就是num[t+3] t=1 I就是num[4]

当然你也可以num[t+6] num[t+7] 这些都无所谓 只要不与前面的num矛盾随便你怎么取

4的情况: 个位4 IV

十位4 XL

百位4 CD

因为 4的情况就是 5-1 50-10 500-100

5 50 500 已经确定 1 10 100也已经确定填上就OK了

其余的 1 2 3 6 7 8 这些情况

直接 num[t+3]+= 情况

比如 个位的3 III num[4]+=3 十位的三 XXX num[5]+=3 百位的三 CCC num[6]+=3 千位的三 MMM num[7]+=3

 

技术分享
#include <cstdio>
using namespace std;
int ans[233];
inline void Run(int x){
    int t = 0 ;
    while(x){
        t++;
        int cur = x % 10;
        if(cur==9){
            ans[t+4]++;
            ans[t+3]++;
        }
        else{
            if(cur >= 5){
                ans[t]++;   
                cur-=5;
            }
            if(cur == 4){
                ans[t]++;
                ans[t+3]++;
            }
            else{
                ans[t+3]+=cur;
            }
        }
        x/=10;
    }
}

int main(){
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;i++) Run(i);
    if(ans[4]) printf("I %d\n",ans[4]);
    if(ans[1]) printf("V %d\n",ans[1]);
    if(ans[5]) printf("X %d\n",ans[5]);
    if(ans[2]) printf("L %d\n",ans[2]);
    if(ans[6]) printf("C %d\n",ans[6]);
    if(ans[3]) printf("D %d\n",ans[3]);
    if(ans[7]) printf("M %d\n",ans[7]);
}
代码实现

 

以上是关于[找规律][模拟]罗马数字的主要内容,如果未能解决你的问题,请参考以下文章

江苏省赛C - Cats 找规律+模拟

JavaScript笔试题(js高级代码片段)

E. Count The Blocks(找数学规律)

Paper Folding UVA - 177 模拟+思路+找规律

PAT1049-----枚举法,找规律题,注意降低时间复杂度

ACdream1187-Rational Number Tree-模拟/找规律