題目敘述
每筆測資第一行有一個正整數N,接下來會有N筆資料。每筆資料有兩行,每行有7個為0或是1的整數,0代表平聲,1代表仄聲。要求輸出資料中的對聯有沒有符合下列規則,如果有沒有符合的就輸出該規則的編號,如果三個規則都有符合則輸出None。
七言對聯有三個限制:
A: 二四不同二六同:每一句第二、四個字必須不同平仄,而第二、六個字必須相同平仄
B: 仄起平收:第一句的結尾必須為仄聲,第二句的結尾必須為平聲
C: 上下相對:第一、二句的第二、四、六個字平仄必須不同
範例輸入 #1
1
1 1 0 0 0 1 1
1 0 0 0 1 1 0
範例輸出 #1
AC
範例輸入 #2
1
0 1 1 0 1 1 1
1 0 1 1 0 0 0
範例輸出 #2
None
範例輸入 #3
2
0 1 1 0 0 0 1
1 0 1 1 0 1 1
0 1 0 0 0 0 1
0 0 0 0 0 1 1
範例輸出 #3
AB
ABC
解題思路
可以使用Vector先將兩句對聯存起來並使用Index的方式來做判斷,依照題目的規則去做判斷即可。
解題程式碼如下 (僅供參考):
#include <iostream>
#include <vector>
using namespace std;
int main() {
cin.sync_with_stdio(0);
cin.tie(0);
int N;
cin >> N;
for (int i = 0; i<N; i++)
{
vector<int>one;
vector<int>two;
one.push_back(-1);
two.push_back(-1);
bool A = false, B = false, C = false;
for (int j = 0; j<7; j++)
{
int tmp;
cin >> tmp;
one.push_back(tmp);
}
for (int j = 0; j<7; j++)
{
int tmp;
cin >> tmp;
two.push_back(tmp);
}
if (one[2] != one[4] && one[2] == one[6] && two[2] != two[4] && two[2] == two[6]) A = true;
if (one[7] == 1 && two[7] == 0) B = true;
if (one[2] != two[2] && one[4] != two[4] && one[6] != two[6]) C = true;
bool none = true;
if (!A)
{
none = false;
cout << "A";
}
if (!B)
{
none = false;
cout << "B";
}
if (!C)
{
none = false;
cout << "C";
}
if (none) cout << "None";
cout << "\n";
}
}
留言
張貼留言