zoukankan      html  css  js  c++  java
  • 产生冠军

    题目描述

    有一群人,打乒乓球比赛,两两捉对撕杀,每两个人之间最多打一场比赛。
    球赛的规则如下:
    如果A打败了B,B又打败了C,而A与C之间没有进行过比赛,那么就认定,A一定能打败C。
    如果A打败了B,B又打败了C,而且,C又打败了A,那么A、B、C三者都不可能成为冠军。
    根据这个规则,无需循环较量,或许就能确定冠军。你的任务就是面对一群比赛选手,在经过了若干场撕杀之后,确定是否已经实际上产生了冠军。
     

    输入

    输入含有一些选手群,每群选手都以一个整数n(n<1000)开头,后跟n对选手的比赛结果,比赛结果以一对选手名字(中间隔一空格)表示,前者战胜后者。如果n为0,则表示输入结束。
     

    输出

    对于每个选手群,若你判断出产生了冠军,则在一行中输出“Yes”,否则在一行中输出“No”。
     

    样例输入

    3
    Alice Bob
    Smith John
    Alice Smith
    5
    a c
    c d
    d e
    b e
    a d
    0

    样例输出

    Yes
    No
    这个题是从网上借鉴的方法,
    方法是 左边是胜利 右边是失败 看左边的 在不在右边 如果不在并且只有一名胜利者 那么就可以 ,否则不可以
    记住  比较字符串  一定用strcmp;
    用二维字符串 输入多次字符串;
    字符串输入不带指针&是因为他本事就是首地址;

    #include<stdio.h> #include<string.h> int main() { int n,m,d,e,i,j,k,p; char a[10000][100],b[1000][1000]; int c[1000],s[1000]; while(scanf("%d",&n)&&n)//这样是为了可以输入零结束。 { k=0; memset(c,0,sizeof(c));//因为又多次循环 所以要初始化数组; memset(s,0,sizeof(s)); for(i=0;i<n;i++) { scanf("%s%s",a[i],b[i]);//输入;定义C里面的值全为1; c[i]=1; } for(i=0;i<n;i++) { for(j=0;j<n;j++) { if(strcmp(a[i],b[j])==0)//如果相等的话 把那个C[i]=0; { c[i]=0; } } } for(i=0;i<n;i++) { if(c[i]==1) { s[k++]=i;//找出c[i]为一的下坐标存到另一个数组里。 } } p=1; for(i=1;i<k;i++) { if(strcmp(a[s[i]],a[s[i-1]])==0)//用坐标为s[K]的a[s[k]]值进行比较 如果相等就个数加一 p++;// } if(p==k)//与得到的K 进行比较 如果相等就代表只有一个人 输出YES { printf("Yes");} else//否则输出NO; { printf("No"); } } }
    
    
    
    
    
  • 相关阅读:
    最大熵模型中的数学推导
    最大似然估计总结
    减压放松的一些网站
    决策树
    【转】贝叶斯分类干货
    【转】数学之美番外篇:平凡而又神奇的贝叶斯方法
    信号量与并发控制
    枚举与字符串映射
    Block与参数
    Sublime Text 小计
  • 原文地址:https://www.cnblogs.com/zhangjiaqi123/p/6184637.html
Copyright © 2011-2022 走看看