360笔试题--找老乡

来源:互联网 发布:java如何实现四舍五入 编辑:程序博客网 时间:2024/05/16 06:31

思路:先对每组人员进行比较,保证较小的编号在a组中,然后根据a组进行排序。设定一个标志位数组,对应的每一位代表人物编号,值就是是否与1号人物是老乡。具体见代码。

#include<iostream>using namespace std;int main(){int N,M;int count = 0;while(cin>>N>>M){//循环输入if(0==N&&0==M)break;if(0==N||0==M){cout<<count<<endl;continue;}int *a=new int[M];//人员aint *b=new int[M];//人员bbool *d=new bool[N+1];//标志位,下标对应人物编号,值为真时表示和一号人物是老乡for(int i=0;i<N+1;i++){d[i]=false;//标志位初始化为假}int temp = 0;for (int i =0;i<M;i++){cin>>a[i]>>b[i];if (a[i]>b[i]){//对应一组人员,保证人员编号小的在a组中,后面根据a组进行排序temp = a[i];a[i] = b[i];b[i] = temp;}int temp_a = a[i];int temp_b = b[i];int j;for (j=i-1;j>=0&&temp_a<a[j];j--){//根据a组进行插入排序a[j+1]=a[j];b[j+1]=b[j];}a[j+1]=temp_a;b[j+1]=temp_b;}if (a[0]!=1){//如果第0 位不是1号人物,那说名所有小组不会和1号人物有关系。cout<<count<<endl;continue;}else{d[a[0]]=true;}for(int i=0; i<M;i++){//a[i]和b[i]是对应的,只要a[i]对应的标志位d[a[i]是真         //则对应的d[b[i]]也是真。         //因为a[i]编号小于b[i],所以对于整个循环来看,是先遍历到d[a[i]].if(d[a[i]])d[b[i]]=true;}for (int i=2;i<N+1;i++){if(d[i])count++;}cout<<count<<endl;}return 0;}


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 银行卡限额怎么办京东 预留信息忘了怎么办 中信银行香港卡怎么办 无银行预留信息怎么办 农工商超市红利卡怎么办 余额宝转入不了怎么办 公司车辆怎么办营运证 便利店转不出去怎么办 便利店开业营业额低怎么办 现在etc超时了怎么办? 中国银行e贷逾期怎么办 招商银行e分期逾期怎么办 保单贷款还不了怎么办 离婚时按揭房怎么办 按揭房子不要了怎么办? 征信有问题怎么办房贷 夫妻一方不做房贷共还人怎么办 给你花逾期一年怎么办 文件夹密码忘记了怎么办 网址被qq拦截怎么办 手机qq邮箱中毒怎么办 邮箱附件带病毒怎么办? 打开了病毒附件怎么办? qq邮箱被拦截怎么办 邮件地址已被注册怎么办 信用卡欠款怎么办房贷 贷款还不起了怎么办 装修贷款无抵押怎么办 黑户买房做贷款怎么办 易分期无法还款怎么办 工行晚还款一天怎么办 手机银行网页打不开怎么办 顺丰分拣错误怎么办 超市生意越来越差怎么办 收到逾期催收函怎么办 手机贷逾期了怎么办 临额到期还不上怎么办 信用卡不想用了怎么办 授信时间到了怎么办 餐饮吃到苍蝇怎么办 商户二级处罚了怎么办