朋友(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;
}

猜你喜欢

转载自www.cnblogs.com/Forever-chen/p/9690914.html
cpp