朋友(friend.cpp)

题一:朋友(friend.cpp)

【题面】
同学们应该学会多交一些好朋友。朋友关系是相互的,A 是B 的好朋友,则B 也是A的好朋友。朋友关系是不传递的,A 是B 的好朋友,B 是C 的好朋友,但A 和C不一定是好朋友。现在给出某小学部分同学之间的朋友关系,请编程统计朋友最多的人有多少个好朋友。
【样式输入】
4 3
lucy lily
jam lily
jam peter
【样式输出】
2

  • 【算法分析】
  • 用类型为字符串(string)的变量统计每个人的名字和其的好友名称,用一个标记标记朋友之间的关系,统计出每个人朋友的数量,还要考虑数据重复,并进行处理,最后输出朋友数最多的人所拥有的朋友的数量
  • 【数据范围约定】
  • 50%以上的测试点输入数据保证朋友关系没有重复。 100%的测试点输入数据保证2≤n≤100,1≤m≤1000,且没有自己跟自己的朋友关系。
  • 【AC代码】
#include<bits/stdc++.h>//文件操作用万能库,否则加cstdio
using namespace std;
int pos=0;//已有姓名的数量
string s[110];
int work(string x){
	for(int i=1;i<=pos;i++){
		if(x==s[i])
			return i;//处理重复姓名,如姓名重复,则return返回其的下标,如s[1]中下标“1”,并在主程序中处理下标
	}
	s[pos]=x;
	pos++;
	return  pos-1;
}
int main(){
	freopen("friend.in","r",stdin);
	freopen("friend.out","w",stdout);
	int n,m,a[110],f[110][110];
	string s1,s2;
	memset(a,0,sizeof(a));//将a[]数组全部清零
	memset(f,0,sizeof(f)); //将f[]数组全部清零
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		cin>>s1>>s2;
		int k1=work(s1);//这个变量是s1在s中的下标是多少
		int k2=work(s2); //这个变量是s2在s中的下标是多少
if(f[k1][k2]==0&&f[k2][k1]==0){//如果f[][]为零,则这对朋友之间的关系,没有在f[][]中记录,就将其记录一次
			a[k1]++;
			a[k2]++;
			f[k1][k2]=1; //标记朋友关系是否记录
			f[k2][k1]=1;
		}
	}
	int  ans=-1;
	for(int i=1;i<=n;i++){
		if(a[i]>ans)
			ans=a[i];
	}
    cout<<ans<<endl;//输出朋友数最多的人所拥有的朋友的数量
	return 0;
}

posted @ 2018-09-22 19:26  半笙、凡尘  阅读(989)  评论(1)    收藏  举报