问题标题: 酷町堂:考试第二题怎么做

0
0
已解决
黄俊博
黄俊博
资深光能
资深光能

#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
int n,r,data[400],count;
bool used[400];

bool sushu(int x)
{
    if(x==1)return false;
    if(x==2)return true;
    for(int i=2;i<=sqrt(x);i++)
        if(x%i==0)
            return false;
    return true;
}

void search(int t,int sum,int pre) 
{
    if(t>r)
    {
        if(sushu(sum))count++;
        return ;
    }
    else
    {
        for(int i=pre+1;i<=n;i++)
        {
            search(t+1,sum+data[i],i);
        }
    }
}
int main()
{
    memset(used,0,sizeof(used,0));
    cin>>n>>r;
    for(int i=1;i<=n;i++)
        cin>>data[i];
    if(r==0)
        return 0;
    search(1,0,0);
    cout<<count;
    return 0;
}

怎么错了啊,为什么 

4 2

1 3 3 4

过不了

怎们改啊???


0
已采纳
王子凡
王子凡
高级光能
高级光能
//判断素数
void search(int t,int sum,int start)
{
    if (t>k)
    {
        if (sushu(sum))
        {
            ans++;
        }
        return ;
    }
    else
    {
        for (int i=start;i<=n;i++)
        {
            search(t+1,sum+a[i],i+1);
        }
    }
}

核心代码 最后输出ans就OK了

1
栾峻岩
栾峻岩
初级天翼
初级天翼
void dfs (int t,int start)
{
    if (t>k)
    {
        int sum=0;
        for (int i=1;i<=k;i++)
        {
            sum+=x[ans[i]];
        }
        if (zhishu(sum))
        {
            ++count;
        }
        return;
    }
    for (int i=start+1;i<=n;i++)
    {
        if (!used[i])
        {
            used[i]=true;
            ans[t]=i;
            dfs(t+1,i);
            ans[t]=0;
            used[i]=false;
        } 
    }
}

这是我自己做的,如果不好,请原谅!!

0
周天睿
周天睿
初级光能
初级光能

这是考试的题目,我不能查看,更不知道是哪一题,现在的考试题目只能提交1次。

做过了再提交就不行了,而且过了时间就打不开试卷了。

0
陆麟瑞
陆麟瑞
资深天翼
资深天翼

搜索

void search(int t,int s,int total)
{
    if(total==m&&t>n)
    {
        if(pd(s))
        {
            ans++;
        }
        return;
    }
    if(t>n) return;
    if(total<m) search(t+1,s+a[t],total+1);
    search(t+1,s,total);
}
0
梁锦程
梁锦程
高级光能
高级光能
bool judge(int x)
{
    if(x==1)
        return 0;
    if(x==2)
        return 1;
    for(int i=2;i*i<=x;i++)
        if(x%i==0)
            return 0;
    return 1;
}
void dfs(int s,int t,int id)
{
    if(judge(s)&&t==m)
    {
        num++;
        return;
    }
    if(t>m)
        return;
    for(int i=id+1;i<=n;i++)
        dfs(s+a[i],t+1,i);
}

 

0
0
我要回答