摸鱼程序猿第一次写题解(如果有什么可以改进的地方望大家指正)alt

有没有兄弟读题目就感觉自己的DNA动了(怎么我还是摆脱不了高树和大雾)BUSHI) alt 那么我们就要先开始审题了。

  • 这个班级有n个哥们,一名不知名网友问了每人一个问题(容易被打千万别学),有人答yes有人答no,已知有x人挂高树,有y人挂大雾,不知名网友犯了老年痴呆症但他却想知道同时挂这些的最大人数和最小人数(用max和min表示,说不定他自己也在里面)注意这里是他问了每一个人,而这些人都会回答yes或no。

题目到这里我在读六年级的表弟都反应过来知道这烤的是什么芝士---VEN图嘛。

但是这VEN图也分情况,一种是挂高树加挂大雾的人之和小于总人数(x+y<n),另外一种是和大于(x+y>n),至于等于总人数(x+y=n)的这种情况在后面也有,这里说一下,比如有一个班有四个人有两个人会游泳,有两个人会羽毛球问至少有多少人同时会这两样,显而易见,0人,那么至多呢?也很明显,是两个人。

可能也有兄弟已经把集合的VEN图给忘了,不过没事,下面咱们就来复习一下。举个栗子(x+y>n),一个班里面有45个人,有对象的为44个(剩下一个是我),会撩妹(男女不分)的有26个,问有多少人既有对象又会撩妹的(将两个都不会的排除在外哦)?这里咱就可以用一张图来解释,不多BB上图。alt

可以看到中间黑色的一大坨就是交集求法就在右边的上面可以知道是25人(抽屉原理嘛)然后再算一下只会撩妹的为 26-25=1人 ,只有对象的为 44-25=19人,验算可知既不会撩妹又没对象的为0人。栗子咱们就举到这里(手酸)

alt

下面回到正题

本题只说有x人挂高树y人挂大雾但并未说明x,y的关系到底是谁大谁小,所以要分情况来讨论 : 1.第一种情况就是下x+y>=n时情况为以下(灵魂画师毕加索再次异地登陆)alt 图一为x>y时,挂的人数最大的情况,就是当x包含y时此时最大的即为y,最小的话呢则为上面讲的抽屉原理,即x+y-n(图二,因为忘了就懒得加了),而图三即为y>x时的情况和前面一样为x。(毕加索断开连接)

2.下面就给各位绝活哥讲下第二种情况即为x+y<n时(毕加索重新连接) alt 图一为x+y<n并且此时无交集,很明显是同时挂高树和大雾的最小人数即min,接下来为图二,这张图就是当有交集的时候它以y>x为例此时max为x很明显,图三同理。

可能看到这里有些比较帅的小兄弟就会说你这个乱七八糟的说的一堆能不能直接上代码。 alt (弔图一堆)

```#include<stdio.h>
    int main()
{

    int n,x,y,i,j;
    (1<=n<=100);
    (1<=x<=n);
    (1<=y<=n);
    scanf("%d %d %d",&n,&x,&y);
    i=(x>=y)?y:x;
    j=(x+y<n)?0:x+y-n;
    printf("%d %d",i,j);
}

``` js分割线---------------------------------------

解释一波 这个要结合两种情况一起看
第一个三目运算符判断最大值,最大的就是y(x>y)或x(y>x)时因为只有这时两者的交集最大 即两个都挂的人最多

第二个三目运算符就是判断最小值的,如果x+y>=n则由抽屉原理知x+y-n为最小值,x+y<n则图中很明显 两者无交集时有最小,即为0。

这简直是妙蛙种子吃妙脆角--秒极了。

这道题到此就已经结束了,总的来说并不是很难(对于没有忘记抽屉原理的小兄弟,总之通过VEN图可以很直接的看出关系用三目运算符或者if else都可以很快的做出来,虽然题目简单但还是希望各位可以从中学习到一些思想如画图之类(凑字数alt

以上就是俺的题解,第一次尝试有什么不足的地方希望各位可以多多包涵,以后可以继续改进,溜了溜了。