链接:https://ac.nowcoder.com/acm/contest/9700/A
来源:牛客网
题目描述
给定一个长度为 n 数列,判断其是否为“牛”的,是则输出“YES”,否则输出“NO”。
一个数列是“牛”的,当且仅当其满足以下三个条件中至少一个:
1、这个数列是等差数列
2、这个数列是等比数列
3、这个数列是等模数列。
等差数列和等比数列的定义如果不清楚建议百度或重上小学(划掉),等模数列的定义是:对于任意相邻两数,后一个对前一个取模后的值均相等。
输入描述:
第一行一个整数 n。
第二行 n 个整数,分别表示这个数列的值。
输出描述:
一行,一个单词“YES”或“NO”(不含引号)。
示例1
输入
5
1 2 3 4 5
输出
YES
说明:此数列为等差数列。
示例2
输入
3
5 7 16
输出
YES
说明:此数列为等模数列。
备注:
3 <= n <= 10^5,1 <= 数列中的每个数<=10^9。
个人想法: 这题最坑的点就是等比的double,注意判断的时候*1.0就行。
#include<iostream>
using namespace std;
int main()
{
int n,i,dc,dm,flagc=0,flagb=0,flagm=0;
double db;//等比特殊,需要double
cin>>n;
int a[n];
if(n<3)
{
return 0;
}
for(i=0;i<n;i++)
{
cin>>a[i];
}
dc=a[1]-a[0];
db=a[1]*1.0/a[0]*1.0;//计算值的时候记得*1.0
dm=a[1]%a[0];
for(i=1;i<n;i++)
{
if(a[i]-a[i-1]!=dc)
{
flagc=1;
}
if(a[i]*1.0/a[i-1]*1.0!=db)
{
flagb=1;
}
if(a[i]%a[i-1]!=dm)
{
flagm=1;
}
}
if(flagc==0||flagb==0||flagm==0)
{
cout<<"YES"<<endl;
}
else
{
cout<<"NO"<<endl;
}
return 0;
}