求教IEnumerable<int>遍历的问题
答案:2 悬赏:20 手机版
解决时间 2021-02-07 20:11
- 提问者网友:我一贱你就笑
- 2021-02-06 19:56
求教IEnumerable<int>遍历的问题
最佳答案
- 五星知识达人网友:長槍戰八方
- 2021-02-06 21:05
#include
#include
#include
using namespace std;
int in(){ //读入优化 ,加快读入速度
int x=0;char ch=getchar();
while(ch>'9' || ch<'0') ch=getchar();
while(ch>='0' && ch<='9') x=x*10+ch-'0',ch=getchar();
return x;
}
#define maxn 101
int n,m,ans;
int a[maxn];
bool no_prime[maxn];
void get_prime(){ //筛选法求素数
int x=sqrt(maxn);
no_prime[1]=no_prime[0]=true;
for(int i=2;i<=x+1;i++)
if(!no_prime[i])
for(int j=i*i;j<=maxn;j+=i)
no_prime[j]=true;
}
void prework(){
n=in();m=in();ans=0;
}
void dfs(int t){
if(t>n){ //如果到达n位说明构造成功
ans++;
return;
}
int sum=0;
if(t>=m)
for(int i=t-1;i>t-m;i--) //sorry这里多算了一位,将>=改成>
sum+=a[i]; //计算前 m-1位的值
for(int i=0;i<=9;i++)
if(!no_prime[sum+i]){ //如果加上这一位是一个质数才向下遍历
a[t]=i;
dfs(t+1);
}
}
void mainwork(){
dfs(1); //从第一位开始枚举,深度优先搜索
printf("%d\n",ans);
}
int main(){
//freopen("x.in","r",stdin);
int T=in();
get_prime();
while(T--){
prework();
mainwork();
}
return 0;
}
#include
#include
using namespace std;
int in(){ //读入优化 ,加快读入速度
int x=0;char ch=getchar();
while(ch>'9' || ch<'0') ch=getchar();
while(ch>='0' && ch<='9') x=x*10+ch-'0',ch=getchar();
return x;
}
#define maxn 101
int n,m,ans;
int a[maxn];
bool no_prime[maxn];
void get_prime(){ //筛选法求素数
int x=sqrt(maxn);
no_prime[1]=no_prime[0]=true;
for(int i=2;i<=x+1;i++)
if(!no_prime[i])
for(int j=i*i;j<=maxn;j+=i)
no_prime[j]=true;
}
void prework(){
n=in();m=in();ans=0;
}
void dfs(int t){
if(t>n){ //如果到达n位说明构造成功
ans++;
return;
}
int sum=0;
if(t>=m)
for(int i=t-1;i>t-m;i--) //sorry这里多算了一位,将>=改成>
sum+=a[i]; //计算前 m-1位的值
for(int i=0;i<=9;i++)
if(!no_prime[sum+i]){ //如果加上这一位是一个质数才向下遍历
a[t]=i;
dfs(t+1);
}
}
void mainwork(){
dfs(1); //从第一位开始枚举,深度优先搜索
printf("%d\n",ans);
}
int main(){
//freopen("x.in","r",stdin);
int T=in();
get_prime();
while(T--){
prework();
mainwork();
}
return 0;
}
全部回答
- 1楼网友:未来江山和你
- 2021-02-06 21:53
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include
#include
#include
usingnamespacestd;
intin(){ //读入优化 ,加快读入速度
intx=0;charch=getchar();
while(ch>'9'|| ch while(ch>='0'&& ch returnx;
}
#define maxn 101
intn,m,ans;
inta[maxn];
boolno_prime[maxn];
voidget_prime(){ //筛选法求素数
intx=sqrt(maxn);
no_prime[1]=no_prime[0]=true;
for(inti=2;i if(!no_prime[i])
for(intj=i*i;j no_prime[j]=true;
}
voidprework(){
n=in();m=in();ans=0;
}
voiddfs(intt){
if(t>n){ //如果到达n位说明构造成功
ans++;
return;
}
intsum=0;
if(t>=m)
for(inti=t-1;i>t-m;i--) //sorry这里多算了一位,将>=改成>
sum+=a[i]; //计算前 m-1位的值
for(inti=0;i if(!no_prime[sum+i]){ //如果加上这一位是一个质数才向下遍历
a[t]=i;
dfs(t+1);
}
}
voidmainwork(){
dfs(1); //从第一位开始枚举,深度优先搜索
printf("%d\n",ans);
}
intmain(){
//freopen("x.in","r",stdin);
intt=in();
get_prime();
while(t--){
prework();
mainwork();
}
return0;
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯