题意:首项为a,公差为b的等差数列,看c是否在该等差数列里面。
思路:特判公差是否为0,逆向思维,把a,c与b取模,判断是否相等,判断单调性,注意取模的方法,这个很重要,保证得到的都是相等(同正负)的整数,不然会出现正负不同。
int d=a%c; d=(d+c)%c;
#include <stdio.h> #include <iostream> using namespace std; int main() { int flag1,flag2; int a,b,c; while(~scanf("%d%d%d",&a,&b,&c)) { if(c==0) { if(b==a) printf("YES\n"); else printf("NO\n"); continue; } int d=a%c; d=(d+c)%c; int e=b%c; e=(e+c)%c; if(d==e) flag1=1; else flag1=0; //printf("%d %d\n",d,e); if(c>0&&b>=a) flag2=1; else if(c<0&&b<=a) flag2=1; else flag2=0; if(flag1&&flag2) printf("YES\n"); else printf("NO\n"); } }