我的代码
很简单,就是坑点太多
注意:
1、l>=k(测试点5)
2、i<=s.length()-k,也就是选取字符串的起始位置最多可以等于s.length()-k(测试点2,5),否则就越界了
#include <iostream>
using namespace std;
bool is_prime(int x){
if (x < 2) return false;
for (int i = 2; i <= x / i; i ++ )
if (x % i == 0) {return false;}
return true;
}
string coutpr(string s,int l,int k){
if(l>=k){//坑点,外加位置,写笔记
string stu;
for(int i=0;i<=s.length()-k;i++){//坑点i<=l-k; 而非i<l;
string temp;
for(int j=i;j<=i+(k-1);j++){temp+=s[j];}
if(is_prime(stoi(temp))){return temp;}
}
}
return "404";
}
int main(){
int l,k;
string n;
cin>>l>>k>>n;
cout<<coutpr(n,l,k);
return 0;
}
二刷
#include <iostream>
using namespace std;
bool isPrime(int n) {
if (n <= 1) return false;
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) return false;
}
return true;
}
int main(){
int n,l,flag=0;
string s;
cin>>n>>l>>s;
for(int i=0;i<n;i++){
if(i+l<=n&&isPrime(stoi(s.substr(i,l)))) {//i+l<=n是保证不越界
cout<<s.substr(i,l);
flag=1;
break;
}
}
if(flag==0) cout<<"404";
return 0;
}