题意(化简后):有一个长度为 \(5\) 的序列 \(a\),现给定 \(a_1\),\(a_2\),\(a_3\),\(a_4\),你需要判断是否存在 \(a_5\),使得在每个数只出现一次的情况下,有三个数为连续的正整数,且另外两个数相等。
看到题目,为了方便判断是否相邻,我们先对序列 \(a\) 排序。排好序后,我们要分两种情况讨论 \(a_5\) 的取值。
- 有三个数为连续的正整数。
这样的情况就十分简单,直接令 \(a_5\) 等于剩下的一个数即可,有解。
- 不存在三个连续的正整数,但有两个数相等。
这时候我们就要判断是哪两个数相等,并且看剩下的两个数的差(设为 \(k\))。分两种情况:
-
\(k=1\) 那么说明这两个数相邻,那么令 \(a_5=\) 较大数 \(+1\) 或较小数 \(-1\),有解。
-
\(k=2\) 说明这两个数中间还有一个正整数,令 \(a_5\) 等于这个正整数即可,有解。
若 \(k \ne 1\) 并且 \(k \ne 2\) 则无解。-
- 其他情况则无解。
代码实现就十分简单了:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int T,a[5];
cin>>T;
while(T--)
{
cin>>a[1]>>a[2]>>a[3]>>a[4];
sort(a+1,a+5);
if((a[1]+1==a[2]&&a[3]-1==a[2])||(a[2]+1==a[3]&&a[4]-1==a[3])) cout<<1;
else if(a[1]==a[2]&&(a[4]-a[3]==2||a[4]-a[3]==1)) cout<<1;
else if(a[2]==a[3]&&(a[4]-a[1]==2||a[4]-a[1]==1)) cout<<1;
else if(a[3]==a[4]&&(a[2]-a[1]==2||a[2]-a[1]==1)) cout<<1;
else cout<<0;
cout<<endl;
}
}
标签:两个,int,ne,LG8467,正整数,有解
From: https://www.cnblogs.com/-lilong-/p/17976829