一,題目鏈接
http://acm.fzu.edu.cn/problem.php?pid=1055
二,題目描述
三,題目分析
1.程序段的格式是已知的,一行爲三個字符,且中間是賦值運算符,只需用一個數組記錄字符是否 是已知的(查表法)
2.需要考慮情況如下:2.1 n = -1 時,程序結束
2.2 n = 0時,只有a是已知的
2.3 當賦值運算符後面是數字時,則賦值運算符前面的變量標記爲已知
2.4 當賦值運算符後面是有確定值時,則賦值運算符前面的變量標記爲已知
2.5當賦值運算符後面是沒有確定值時,則賦值運算符前面的變量標記也同樣沒有確定值
2.6注意輸出格式,最後一個字符不含空格,直接換行
四,代碼解答
#include<iostream>
#include<string>
#include<vector>
using namespace std;
void fun(string str, vector<bool> &vec) {
if (str[2] <= '9' && str[2] >= '0') { //如果類似於 變量==數字
vec[str[0] - 'a'] = true;
}
else if (vec[str[2] - 'a'] == true) { //後面的變量有確定值,則前面的變量也有確定值
vec[str[0] - 'a'] = true;
}
else if (vec[str[2] - 'a'] == false) { //後面的變量無確定值,則前面的變量也無確定值
vec[str[0] - 'a'] = false;
}
}
int main() {
int n;
while (cin >> n) {
if (n == -1) {
break;
}
vector<bool> judge(100, false); //判斷是否是確定值的
judge[0] = true; //a 有確定值
vector<string> vec(n);
for (int i = 0; i < n; i++) {
cin >> vec[i];
fun(vec[i], judge);
}
int flag = 0;
int k=0;
for (int j = 25; j >= 0; j--) { //k記錄最後一個有確定值得下標
if (judge[j] == true) {
k = j;
break;
}
}
for (int i = 0; i < 26; i++) {
if (judge[i] == true) {
flag = 1;
if (i != k) {
printf_s("%c ", i + 'a');
}
else
{
printf_s("%c\n", i + 'a'); //最後一位不輸出空格,換行
}
}
}
if (flag == 0) printf("none\n");
//cout << endl;
}
return 0;
}