问题描述
Banlk 的室友选修了《周易与中国文化》这节有名的通识课程,还未开课,室友便开始自己研究起了八卦的奥秘。
一天晚上,Banlk 看见正在研究卦象的室友眼中闪过一道精光,突然站起身来,头也不回地朝阳台上走去。只见窗外刚才还是晴空万里,突然就是一阵电闪雷鸣,待 Banlk 回过神来,室友早已消失无形。
震惊之余,Banlk 在舍友的书桌上发现了一本笔记,笔记上是舍友演算卦象的过程:每次演算舍友都会把 n (n ≥ 2) 个卦象,通过某种运算方式算出作为答案的一个卦象;值得注意的是,这 n 个卦象的顺序与结果无关。笔记的封面赫然写着六个大字:“阳爻连,阴爻断!”
Banlk 认为想要找出舍友的所在,有必要掌握这种神秘的运算;你能通过舍友残存的笔记,猜出运算的规律吗。
输入格式
第一行一个整数 T (1 ≤ T ≤ 100),表示数据组数;
接下来的 T 行,每行以一个整数 n (2 ≤ n ≤ 100) 开头,表示此次演算用到的卦象总数,随后有 n 个字符串,对应所用卦象的英文名称(用一个空格隔开)。
输出格式
输出共 T 行,每行一个字符串,即答案卦象的英文名。
样例输入
3 2 Sky Lake 2 Fire Water 4 Thunder Earth Lake Water
样例输出
Mountain Sky Earth
样例解释
相信同学们定能参透此中奥秘。
猜谜题
每个卦三根横线就是三个数
最后异或就好了
#include<stdio.h>
#include<string.h>
int P[8][3]=
{
{1,1,1},
{0,1,1},
{1,0,1},
{0,0,1},
{1,1,0},
{0,1,0},
{1,0,0},
{0,0,0},
};
char T[8][10];
int ans[3];
int id[105];
int main()
{
strcpy(T[0],"Sky");
strcpy(T[1],"Lake");
strcpy(T[2],"Fire");
strcpy(T[3],"Thunder");
strcpy(T[4],"Wind");
strcpy(T[5],"Water");
strcpy(T[6],"Mountain");
strcpy(T[7],"Earth");
int t;int a,b,c,d,e;char O[100];
scanf("%d",&t);
for(d=1;d<=t;d++)
{
scanf("%d",&e);
for(a=1;a<=e;a++)
{
scanf("%s",O);
for(b=0;b<=7;b++)if(strcmp(T[b],O)==0){id[a]=b;break;}
}
for(a=1;a<=e;a++)
{
ans[0]^=P[id[a]][0];
ans[1]^=P[id[a]][1];
ans[2]^=P[id[a]][2];
}
for(a=0;a<=7;a++)
{
if(ans[0]!=P[a][0])continue;
if(ans[1]!=P[a][1])continue;
if(ans[2]!=P[a][2])continue;
printf("%s\n",T[a]);break;
}
ans[0]=0;ans[1]=0;ans[2]=0;
}
}