题解 SP94 【MAYA - Numeral System of the Maya】

题意分析

这道题主要是模拟出玛雅人的数字,而且这数字非常小,所以开个数组把情况都累计下来就好了

解题思路

由题可以得到玛雅人数字表示方式,这里根据 \(.\)\(-\) 的数量打个 \(20\) 的表,当符号为 \(S\) 的时候理解成两个符号的数量都为 \(0\)

还有这到题的进制不太一样,所以应该前三个打个表,然后后面的跑循环

void make_number(){
	K[1]=1; K[2]=20; K[3]=360; for(int i=4;i<=8;i++) K[i]=K[i-1]*20;
	number[0][0]=0 ; number[1][0]=1 ; number[2][0]=2 ; number[3][0]=3 ; number[4][0]=4 ;
	number[0][1]=5 ; number[1][1]=6 ; number[2][1]=7 ; number[3][1]=8 ; number[4][1]=9 ;
	number[0][2]=10; number[1][2]=11; number[2][2]=12; number[3][2]=13; number[4][2]=14;
	number[0][3]=15; number[1][3]=16; number[2][3]=17; number[3][3]=18; number[4][3]=19;
	return;
}

\(number\) 数组的第一维表示 \(.\) 的数量,第二维表示 \(-\) 的数量,\(K\) 表示每一位数再 \(10\) 进制下的价值。

然后每次就可以枚举从大到小这样就不用数组存起来了

for(int i=N;i>=1;i--){
    int P=0, H=0;// 核心代码
    for(char ch=getchar();ch!='\n';ch=getchar()){
    if(ch=='.') P++;
    if(ch=='-') H++;
    }
    Ans=Ans+number[P][H]*K[i];
}

Made By \(\operatorname{wheneveright}\).

posted @ 2021-04-12 19:04  XJ21  阅读(110)  评论(0)    收藏  举报