①
原题中文大意
;
同一个IP的人用不同的ID,找出哪几个ID是相同IP的。
②
算法思想及解题用到的主要数据结构:
使用 map 容器。
字符串输出按照MIAN_ID字符串顺序输出。
③
详细解题思路
法一:
#include <iostream>
#include <string>
using namespace std;
int main()
{
int n;
while(1)
{
string a[20][2];
string b[10][2];
cin >> n;
if(n == 0)
break;
int i=0;
while(i<n){
cin >> a[i][0] >> a[i][1];
i++;
}
//遍历比较,IP地址一样的放在同个二维数组;
//1.重点:学会使用二维数组用来管理一对数据
int j=0;
for(int i=0; i<n; i++)
for(int k = i+1; k < n; k++)
{
if(a[i][1] == a[k][1])
{
b[j][0] = a[i][0];
b[j][1] = a[k][0];
j++;
}
}
//选择排序,按照字典序
//2.重点:学会重要的排序方法:如插入排序、选择排序、冒泡排序
for(int i=0; i < j; i++)
{
int min = i;
for(int k=i; k<j; k++)
{
if(b[k][0] < b[min][0])
min = k;
}
string Main_ID = b[i][0];
string MaJia = b[i][1];
b[i][0] = b[min][0];
b[i][1] = b[min][1];
b[min][0] = Main_ID;
b[min][1] = MaJia;
}
i=0;
while(i<j){
cout<< b[i][1] <<" is the MaJia of " << b[i][0] << endl;
i++;
}
}
return 0;
}
法二:
map容器的使用方法。
map中的元素按照key(first value)降序排列。
#include <iostream>
#include <string>
#include <map>
using namespace std;
int main () {
int T;
string name,IP;
map<string,string> IDIP;
map<string,string> names;
while(cin >> T && T) {
IDIP.clear();
names.clear();
for(int i = 0 ; i < T ; i++) {
cin >> name >> IP;
map<string,string>::iterator it = IDIP.find(IP);
if(it == IDIP.end())
IDIP.insert(pair<string,string>(IP,name));
else
names.insert(pair<string,string>(it->second,name));
}
map<string,string>::iterator its = names.begin();
for(;its != names.end() ; its++) {
cout << its -> second << " is the Majia of " << its->first << endl;
}
cout << endl;
}
}