题目大意:
给你一个首项为a,公差为c的等差数列,问等差数列是否会存在某一项值为b
题解:
简单题,但是道好题,主要有2个坑点
①c可能为0,这个时候只需要判断a和b是否相等就ok了
(这种情况样例都已经给出了,非常良心)
②a、b、c有可能为负值
因为涉及到取模的问题,结果可能不会像我们想的那样,例如12%(-5)=2,于是我就开始各种讨论abc的正负情况,最后也还没考虑全面,还是思维不够......
其实只要看b-a和c是否同号就好了,如果是两个负数取模就像正数一样了,如(-25)%(-21)=-4
负数和负数之间也可以直接相除,和整数一样
可能是因为平时考虑正数多一些,对负数有些陌生感
#include <bits/stdc++.h>
#include <cstring>
using namespace std;
#define ll long long
int main()
{
//freopen("input.txt","r",stdin);
ll a,b,c;
cin>>a>>b>>c;
if(c==0)
{
if(a==b)
puts("YES");
else puts("NO");
return 0;
}
if((b-a)/c>=0 && (b-a)%c==0)
puts("YES");
else
puts("NO");
return 0;
}