缘由优雅数P1351,深雪-职场和发展-CSDN问答
void 优雅数()
{//缘由https://ask.csdn.net/questions/7665878?spm=1005.2025.3001.5141
_int64 r = 0, l = 0, s[10]{}, p1 = 0, p2 = 0, j = 0, t = 0;
std::cin >> r >> l; t = r;
while (r <= l)
{
while (t)++s[t % 10], t /= 10;
while (t < 10)
if (p1 == 0 && s[t] >= 2)
p1 = 1, s[t] = 0, ++t;
else if (p1 == 1 && s[t] >= 2)//有且仅有一种连续。
p1 = 2, s[t] = 0, ++t;
else if (p2 == 0 && s[t] == 1)
p2 = 1, s[t] = 0, ++t;
else if (p2 == 1 && s[t] == 1)//有且仅有一个不同。
p2 = 2, s[t] = 0, ++t;
else
s[t] = 0, ++t;
if (p1 == 1 && p2 == 1)++j, std::cout << r << "\t";
t = ++r; p1 = p2 = 0;
}
std::cout << j << "\n";
}
void 优雅数(_int64 r = 0, _int64 l = 0)
{//缘由https://ask.csdn.net/questions/7665878?spm=1005.2025.3001.5141
_int64 s[10]{}, p1 = 0, p2 = 0, j = 0, t = 0;
//std::cin >> r >> l; r = 0, l = 0,
std::string 读 = "", 文件名 = "..\\Debug\\回复专用\\优雅数.txt";
std::ifstream 文件(文件名, std::ios::ate);
if (!文件.is_open())std::cout << "麻油数据文件\n";
else
{
std::ifstream 文件D(文件名, std::ios::in);
while (!文件D.eof())getline(文件D, 读), ++j; 文件D.close();
文件.seekg(-3, 文件.cur);//定位文件末尾倒回字符量
while (文件.peek() != 文件.widen('\n')) 文件.seekg(-1, 文件.cur);//反向寻找下一个换行即定位倒数第二条数据换行处
文件.seekg(2, 文件.cur);//定位跳过换行2个字符量
getline(文件, 读);
r = _atoi64(读.c_str());
}
std::cout << r << "-" << l << ":\n";
t = r;
while (r <= l)
{
while (t)++s[t % 10], t /= 10;
while (t < 10)
if (p1 == 0 && s[t] >= 2)
p1 = 1, s[t] = 0, ++t;
else if (p1 == 1 && s[t] >= 2)//有且仅有一种连续。
p1 = 2, s[t] = 0, ++t;
else if (p2 == 0 && s[t] == 1)
p2 = 1, s[t] = 0, ++t;
else if (p2 == 1 && s[t] == 1)//有且仅有一个不同。
p2 = 2, s[t] = 0, ++t;
else
s[t] = 0, ++t;
if (p1 == 1 && p2 == 1)++j, std::cout << r << "\t", 写入文本(文件名, std::to_string(r) + "\n");//
t = ++r; p1 = p2 = 0;
}
std::cout << "\n" << j << "\n";
}