我用的是:分类讨论+暴力
其中分类讨论中,我用了一种namespace
名命名空间。如果:
(c = 0) :
当 (a == b) 时,输出 (YES) 否则 (NO)
(c < 1) :
列举所有的等差数列数字,当列举到 (b) 时:(YES), 因为 (c) 为负数,所以越加数越小,所以当当前列举的数已经 (<) (b) 时:(NO)
(c > 1) :
列举所有的等差数列数字,当列举到 (b) 时:(YES), 因为 (c) 为正数,所以越加数越大,所以当当前列举的数已经 (>) (b) 时:(NO)
所以代码自然而然的就写出来啦!(我才不告诉你我WA多少次)
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int a, b, c, flag;
namespace c0
{
void sovle()
{
if (a == b)//当a = b时,标记
flag = 1;
else flag = 0;//否则,标记
}
}
namespace c1//名命名 :当c > 1时,进行一波操作
{
void sovle()
{
while (1)
{
if (a == b)//当b在这个等差数列里时
{
flag = 1;//标记
return;
}
if (a > b)//如果b不存在于这个等差数列
{
flag = 0;//如果大于,标记
return;
}
a += c;
}
}
}
namespace c_1//名命名 :当c < 1时,进行另一波操作
{
void sovle()
{
while (1)
{
if (a == b)
{
flag = 1;
break;
}
if (a < b)//如果小于
{
flag = 0;//标记
break;
}
a += c;
}
}
}
int main()
{
cin >> a >> b >> c;//输入
if (c == 0) c0::sovle();//调用名空间
if (c > 0) c1::sovle();
if (c < 0) c_1::sovle();
if (flag == 1) cout << "YES";//输出
if (flag == 0) cout << "NO";
puts("");//换行
return 0;
}