测试点三注意:题目中明确说明:例如在 200236 中找 4 位素数,0023 算是解;但第一位 2 不能被当成 0002 输出,因为在原始数字中不存在这个 2 的前导零。
初始代码:
#include <bits/stdc++.h>
using namespace std;
string str;
int k, n;
bool is_prime(int x)
{
if (x < 2)
return false;
for (int i = 2; i * i <= x; i++)
{
if (x % i == 0)
return false;
}
return true;
}
int main()
{
cin >> n >> k >> str;
if (n <= 0)
{
cout << "404";
return 0;
}
// cout << "str:" << str << endl;
for (int i = 0; i < str.size(); i++)
{
int j = i + k - 1; // 表示最后一位
int num = 0;
for (int x = i; x <= j; x++)
{
num = num * 10 + int(str[x] - '0');
}
if (is_prime(num))
{
cout << num;
return 0;
}
}
cout << "404";
return 0;
// 20 5 23654987725541023819
}
输出结果,显然,由题意可知,应该输出0023(无法通过案例3)
因此修改代码如下:
#include <bits/stdc++.h>
using namespace std;
string str;
int k, n;
bool is_prime(int x)
{
if (x < 2)
return false;
for (int i = 2; i * i <= x; i++)
{
if (x % i == 0)
return false;
}
return true;
}
int main()
{
cin >> n >> k >> str;
if (n <= 0)
{
cout << "404";
return 0;
}
// cout << "str:" << str << endl;
for (int i = 0; i < str.size(); i++)
{
int j = i + k - 1; // 表示最后一位
int num = 0;
for (int x = i; x <= j; x++)
{
num = num * 10 + int(str[x] - '0');
}
if (is_prime(num))
{
for (int x = i; x <= j; x++)
{
// 测试点三
cout << str[x];
}
return 0;
}
}
cout << "404";
return 0;
// 20 5 23654987725541023819
}
最终结果:
PAT测试点: