永发信息网

求教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;
}
全部回答
  • 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; }
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯