2023年5月csp认证考试第一题(重复局面)
题目描述
解题思路
此题的重点在与判断方面。我么可以定义一个局面结构体,结构体里面用8个字符串变量来代替棋盘上的情况。每次循环读取8行初始化一个结构体,然后将其存入数组,后面用一个for循环来计算一个局面出现的次数。这里重载==运算符以便于判断局面是否重复。具体代码如下:
#include <bits/stdc++.h>
#include<string>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
//局面结构体
struct Case{
string str1;
string str2;
string str3;
string str4;
string str5;
string str6;
string str7;
string str8;
};
//==运算符重载
bool operator==(const Case& case1, const Case&case2){
if((case1.str1==case2.str1)&&(case1.str2==case2.str2)&&(case1.str3==case2.str3)&&(case1.str4==case2.str4)&&(case1.str5==case2.str5)&&(case1.str6==case2.str6)&&(case1.str7==case2.str7)&&(case1.str8==case2.str8)){
return true;
}
else{
return false;
}
};
int main(int argc, char** argv) {
vector<Case> case_;
int n=0;
cin>>n;
string test1;
vector<int> result;
result.push_back(1);
for(int i=0;i<n;i++){
string str1;
string str2;
string str3;
string str4;
string str5;
string str6;
string str7;
string str8;
cin>>str1>>str2>>str3>>str4>>str5>>str6>>str7>>str8;
Case temp={str1,str2,str3,str4,str5,str6,str7,str8};
if(case_.size()==0){
case_.push_back(temp);
}
else{
int count=1;
for(int j=0;j<case_.size();j++){
if(temp==case_[j]){
count++;
}
}
case_.push_back(temp);
result.push_back(count);
}
}
for(int i=0;i<n;i++){
cout<<result[i]<<endl;
}
return 0;
}