### 2015年奇虎360在线笔试编程题解析
#### 题目一:投票选镇长
**题目描述**:
本题旨在找出一个“镇长”,定义为该人认识所有人且只认识这些人。具体来说,每个人都有一个编号,并且存在一些人际关系,这些关系表示为两个编号之间的相互认识。给定一定数量的人及其相互认识的关系,找出所有可能成为“镇长”的候选人。
**输入格式**:
- 第一行输入整数 T,代表数据组数。
- 对于每组数据:
- 第一行输入两个整数 n 和 m,分别表示人数和关系数。
- 接下来 m 行,每行输入两个整数 x 和 y,表示编号为 x 的人认识编号为 y 的人。
**输出格式**:
- 对于每组数据,输出符合条件的候选人的数量,然后是这些候选人的编号。如果没有符合条件的人,则只输出 0。
**样例输入**:
```
3
20
32
12
32
45
11
21
31
41
33
```
**样例输出**:
```
0
1
2
1
1
```
**参考代码分析**:
此题主要考察了数组和哈希表的应用。下面是代码的具体分析:
1. **读取数据组数**:首先读入整数 T,表示测试数据的组数。
2. **初始化数组**:为每组数据分配两个二维动态数组 `In` 和 `Out` 分别记录每个人被其他人认识的人数和认识其他人的人数。同时创建一个整型数组 `Tn` 来存储每组数据中的人数。
3. **处理每组数据**:
- 初始化每个人被认识和认识别人的人数都为 1(默认认识自己)。
- 读入每组数据中的关系数,并更新每个人被认识和认识别人的人数。
4. **找出候选人**:遍历每组数据中的每个人,如果一个人被认识的人数等于总人数且认识别人的人数为 1,则将其视为候选人。
5. **输出结果**:对于每组数据,输出候选人的数量及编号。
#### 题目二:查找字符串中首次出现的单一字符
**题目描述**:
给定一个字符串,找出其中第一次只出现一次的字符。如果不存在这样的字符,则返回空值或特定标记。
**输入格式**:
- 第一行输入整数 T,代表数据组数。
- 接下来的 T 行,每行输入一个字符串 str。
**输出格式**:
- 对于每组数据,输出字符串中第一次只出现一次的字符。如果没有这样的字符,则输出 0 或者空值。
**参考代码分析**:
此题主要考察了哈希表的应用。下面是代码的具体分析:
1. **读取数据组数**:首先读入整数 T,表示测试数据的组数。
2. **读取每个字符串**:使用 `getline` 读入每个字符串。
3. **处理每个字符串**:
- 创建一个长度为 256 的整型数组 `hash` 来记录每个字符出现的次数。
- 遍历字符串,统计每个字符出现的次数。
- 再次遍历字符串,找到第一个出现次数为 1 的字符即为所求。
4. **输出结果**:对于每组数据,输出第一次只出现一次的字符。
以上两个题目都是奇虎360在线笔试中常见的算法题目类型,通过对这些题目的练习可以加深对基础数据结构和算法的理解与应用。