问题:
题解:
这个题就是考察我们逻辑思维的一个问题,对于一组数,要使他们能够进行或加、或减、或不变的操作变成相等的数,那么他们的类别就不能够超过三个。也就是说:如果这些数都是一个的话可以,都是两个数的话也可以,都是三个数的话,如果这三个数等差,那么也可以。因此整个程序就是我们对一个数列进行去重复以及上述条件是否满足的判定操作。
因此,整个程序的大体部分就是借助数组等对数组进行处理。。
完整代码:
#include <iostream>
#include<stdio.h>
#include<stdlib.h>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <map>
#include<queue>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char** argv) {
long long a[10001];
long long n;
cin>>n;
long long b[4];
for(int i=0;i<n;i++)
{
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
long long count=1;
long long p;
cin>>p;
for(int j=0;j<p;j++)
{
cin>>a[j];
}
b[1]=a[0];
bool is=false;
for(int j=0;j<p;j++)
{
is=false;
for(int k=1;k<=count;k++)
{
if(a[j]==b[k])
{
is=true;
}
}
if(!is)
{
count++;
b[count]=a[j];
}
if(count>=4) break;
}
if(count==1) cout<<"YES"<<endl;
if(count==2)
{
cout<<"YES"<<endl;
}
if(count==3)
{
if(((double)(b[1]+b[2]+b[3])/3)==b[1])
{
cout<<"YES"<<endl;
}
else if(((double)(b[1]+b[2]+b[3])/3)==b[2])
{
cout<<"YES"<<endl;
}
else if(((double)(b[1]+b[2]+b[3])/3)==b[3])
{
cout<<"YES"<<endl;
}
else
{
cout<<"NO"<<endl;
}
}
if(count>=4)
{
cout<<"NO"<<endl;
}
}
return 0;
}
反思:
在测试时,我对于整个实验的数据范围没有注意到,导致整个题基本上都没有得分,下次一定要注意。