题目背景

国际象棋在对局时,同一局面连续或间断出现3次或3次以上,可由任意一方提出和棋。

问题描述

国际象棋每一个局面可以用大小为8*8的字符数组来表示,其中每一位对应棋盘上的一个格子。六种棋子王、后、车、象、马、兵分别用字母 k、q、r、b、n、p 表示,其中大写字母对应白方、小写字母对应黑方。棋盘上无棋子处用字符 * 表示。两个字符数组的每一位均相同则说明对应同一局面。
现已按上述方式整理好了每步棋后的局面,试统计每个局面分别是第几次出现。
提交平台

代码

#include<stdio.h>
int xiangdeng(char a[72],char b[72])
{
	int i;
	for(i=0;i<72;i++)
	{
		if(a[i]!=b[i])
		return 1;
	}
	return 0;
}
int main()
{
	int n,i,j;
	scanf("%d",&n);
	getchar();
	char a[n][72];//由于含换行符,实际字符串大小为72
	int flag[n]={0};
	for(i=0;i<n;i++)
	{
		for(j=0;j<72;j++)
		scanf("%c",&a[i][j]);
		for(j=0;j<=i;j++)
		{
			if(xiangdeng(a[i],a[j])==0)
			flag[i]++;
		}
	}
	for(i=0;i<n;i++)
	printf("%d\n",flag[i]);
	return 0;
}

遗留问题

原本直接用strcmp函数进行比较的,但是很奇怪,用了会出错