60分的模拟不是正解,正解可以用DFS和BFS,也可以对模拟算法做些优化
但是,我的做法是————打表
例如,有这样一段代码
#include<bits/stdc++.h>
using namespace std;
long long a[9];
long long pd1(long long n){
if (n==1) return 1;
if (n==2) return 10;
if (n==3) return 100;
if (n==4) return 1000;
if (n==5) return 10000;
if (n==6) return 100000;
if (n==7) return 1000000;
if (n==8) return 10000000;
}
long long pd2(long long n){
if (n==1) return 9;
if (n==2) return 99;
if (n==3) return 999;
if (n==4) return 9999;
if (n==5) return 99999;
if (n==6) return 999999;
if (n==7) return 9999999;
if (n==8) return 99999999;
}
bool zs(long long n){
if(n==2) return true;
if(n==1) return false;
for (long long i=2;i*i<=n;i++){
if (n%i==0) return false;
}
return true;
}
bool zs1(long long n){
long long k=1;
while(n!=0){
if (zs(n)==false) return false;
n/=10;
}
return true;
}
int main()
{
long long n;
cin>>n;
for (long long i=pd1(n);i<=pd2(n);i++){
if (zs1(i)) cout<<i<<endl;
}
return 0;
}
他会TLE
看看数据范围? 1≤n≤8
做法已经非常明显了,打表,加油吧