1273 set

集合

题目描述

对于包含整数多值集合A={a1,a2,⋯,an},执行以下两步操作

  1. 将某些元素加上整数x
  2. 将某些元素减掉整数y

请问能否使得A的元素全部相等?

输入

第一行是一个整数K(1≤K≤100),表示样例的个数。
每个样例的第一行是一个整数n(1≤n≤100,000)。
第二行是{ai|i=1,2,⋯n},0≤ai≤1,000,000,000。

输出

每行输出一个样例的结果,如果可以使得元素全部相等输出"Yes",否则输出"No"

样例输入

2
5
2 1 2 1 3
5
1 2 3 4 5

样例输出

Yes
No

如果一个数组里不同的数的个数n,经过思考与试验(?),我们发现只有第一步能够将n变为2时,经过第二步的运算才能使元素全部相等。很容易想到n<=3的话为yes,如果n>3就是no。但是还忽略了一点就是当n=4时也有可能是yes。因为如果4个不同的数两两组合相加所得的和是相同的话,也可以是yes。如1,4,14,17(1+17=4+14)-——14,17,14,17——14,14,14,14.所以这里是一个很大很大的坑!!

#include<stdio.h>
int main()
{
    int z,n,i,b,c,t;
    scanf("%d",&z);
    while(z--)
    {
        int ch[7];
        scanf("%d",&n);
        scanf("%d",&ch[0]);
        i=0,n--;
        while(n--)
        {
            scanf("%d",&b);//判断有几个不同的数。输入一个数字,比较一下。 
            if(i<4)
            {
                for(c=0;c<=i;c++)//和数组现有的不同的数字进行比较。 
                {
                    if(ch[c]==b)
                    {
                        break;
                    }
                }
                if(c>i)//和数组里的数都不同,可以存入数组。 
                {
                    i++;
                    ch[i]=b;
                }
            }
        }
        if(i<3)
        printf("Yes\n");
        else if(i==3)
        {
          for(int b=0;b<3;b++)//排升序。方便下面的分组计算。
          {
            for(c=b+1;c<=3;c++)
            {
              if(ch[b]>ch[c])
              {
                t=ch[b];
                ch[b]=ch[c];
                ch[c]=t;
              }
            }
          }
          if((ch[0]+ch[2]==ch[1]+ch[3])||ch[0]+ch[3]==ch[1]+ch[2])//两两分组计算判断和是否相同
          printf("Yes\n");
          else
          printf("No\n");
        }
        else
        printf("No\n");
    }
    return 0;
}

今天是2019年的第一天!!这么勤奋的学习我也是被自己感动惹。新年快乐!

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值