给出 n 进行多组询问,每次询问给出一个 kiki ,求小于等于 n 的回文数中,最小的一个是 KiKi 的倍数的数,如果不存在则输出 none。
输入
第1行:2个数n, q(10 <= n <= 500000, 1 <= q <= 1000)。 第2-q+1行:每行1个数 ki (2 <= ki <= 10000)
输出
输出共q行,对应每个询问的答案。
输入样例
200 4
7
9
19
10
输出样例
7
9
171
none
参考题解
#include <bits/stdc++.h>
using namespace std;
int temp, tempC, N, ArrN, Q, x, Array[500024];
bool unchecked;
bool Int2Bit(int val, int base)
{
temp = val, tempC = 0;
while(temp)
{
tempC = tempC * base + temp % base;
temp /= base;
}
return tempC == val;
}
void fetchArr()
{
int flag = 0;
for(int count = 0; count <= 500024; count++)
{
if(Int2Bit(count, 10))
{
Array[flag] = count;
flag++;
}
}
for(int count = flag; count >= 0; count--)
{
if(N < Array[count])
{
ArrN = count - 1;
}
}
}
int main()
{
scanf("%d %d", &N, &Q);
fetchArr();
for(int count = 0; count < Q; count++)
{
scanf("%d", &x);
unchecked = true;
for(int count = 1; count <= ArrN; count++)
{
if(unchecked && Array[count] % x == 0)
{
cout << Array[count] << endl;
unchecked = false;
}
else if(!unchecked)
{
break;
}
}
if(unchecked)
{
cout << "none\n";
}
}
return 0;
}
本文介绍了一种算法,用于解决查询小于等于n的回文数中,哪些是特定整数ki的倍数问题,当不存在符合条件的数时输出'none'。核心是利用Int2Bit函数判断是否为回文,并遍历数组找到符合条件的最小回文倍数。
698

被折叠的 条评论
为什么被折叠?



