zoukankan      html  css  js  c++  java
  • 洛谷 P1013 进制位

    题目描述

    著名科学家卢斯为了检查学生对进位制的理解,他给出了如下的一张加法表,表中的字母代表数字。 例如:

    +    L    K    V    E
    L    L    K    V    E
    K    K    V    E    KL
    V    V    E    KL    KK
    E    E    KL    KK     KV

    其含义为:

    L+L=L,L+K=K,L+V=V,L+E=E

    K+L=K,K+K=V,K+V=E,K+E=KL

    …… E+E=KV

    根据这些规则可推导出:L=0,K=1,V=2,E=3

    同时可以确定该表表示的是4进制加法

    //感谢lxylxy123456同学为本题新加一组数据

    输入输出格式

    输入格式:

     

    n(n≤9)表示行数。

    以下n行,每行包括n个字符串,每个字串间用空格隔开。(字串仅有一个为‘+’号,其它都由大写字母组成)

     

    输出格式:

     

    ① 各个字母表示什么数,格式如:L=0,K=1,……按给出的字母顺序。

    ② 加法运算是几进制的。

    ③ 若不可能组成加法表,则应输出“ERROR!”

     

    输入输出样例

    输入样例#1: 复制
    5
    + L K V E
    L L K V E
    K K V E KL
    V V E KL KK
    E E KL KK KV
    
    输出样例#1: 复制
    L=0 K=1 V=2 E=3
    4
    #include<map>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    map<char,int>a;
    struct node{
        string s;
        int ans,da;
    }t[10][10];
    int n;
    int main(){
        int x;
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                cin>>t[i][j].s;
        for(int k=2;k<=n;k++){
            x=0;
            for(int i=2;i<=n;i++)
                for(int j=2;j<=n;j++)
                    if(t[i][j].s==t[1][k].s)
                        x++;
            if(!x){
                printf("ERROR!
    ");
                return 0;
            }
            t[k][1].ans=t[1][k].ans=a[t[k][1].s[0]]=x-1;
        }
        for(int i=2;i<=n;i++)
                for(int j=2;j<=n;j++)
                    t[i][j].ans=t[i][1].ans+t[1][j].ans;
        for(int i=1;i<=n;i++)
                for(int j=1;j<=n;j++){
                    x=t[i][j].s.length();
                    if(x==1){
                        t[i][j].da=a[t[i][j].s[0]];
                        continue ;
                    }
                    t[i][j].da=(n-1)*a[t[i][j].s[0]]+a[t[i][j].s[1]];
                }
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                if(t[i][j].ans!=t[i][j].da){
                    printf("ERROR!
    ");
                    return 0;
                }    
        for(int i=2;i<=n;i++)
            cout<<t[1][i].s<<"="<<t[1][i].ans<<" ";
        cout<<endl;
        printf("%d
    ",n-1);
        return 0;
    }
     
    细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。 雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。
  • 相关阅读:
    Linux命令:mapfile
    Linux命令:logout
    行式数据库和列式数据库的浅析
    hadoop常见错误集锦
    hadoop环境搭建遇到问题集锦
    杀毒的一点学习
    powerdesigner的学习
    突然的想法
    shell脚本入门教程(转)
    java classpath深入详解(转)
  • 原文地址:https://www.cnblogs.com/cangT-Tlan/p/7718572.html
Copyright © 2011-2022 走看看