一,题目链接
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;
}