2 solutions

  • 3
    @ 2024-7-10 13:45:54

    纸老虎数据

    #include<iostream>
    using namespace std;
    int n,k,sum=0;
    int a[25];
    void dfs(int x,int t,int su)
    {
        if(t==k)
        {
            for(int i=2;i*i<=su;i++)
            {
                if(i!=su && su%i==0)
                {
                    return;
                }
            }
            sum++;
        }
        for(int i=x+1;i<=n;i++)
        {
            dfs(i,t+1,su+a[i]);
        }
    }
    int main()
    {
        cin>>n>>k;
        for(int i=1;i<=n;i++)
        {
            cin>>a[i];
        }
        dfs(0,0,0);
        cout<<sum;
        return 0;
    }
    
    • 2
      @ 2024-7-16 18:48:46

      题意

      从n个数中选出k个,求里面有多少组和为素数。

      思路

      我一开始看到这道题目是懵的……

      然后我自己手枚了一下,然后试图用电脑模拟过程……

      (惊讶)然后就过了???

      首先,我们是不是先找一个数,作为第一个?

      然后找第二个,第三个……

      一直到第k个,然后求和?

      我就在想,那是不是可以将你数到的第t个数a[x](出于习惯,我把题目中的x数列改成a数组了)往后数,枚举每一个第t+1个数的情况?

      然后当t==k(也就是数完k个数了),就求和判断。

      好问题,那如何标记是否使用a[x]了呢?

      我就用了一个bool数组,1就是使用了,0就是没有使用。

      算出来判断。

      然后用一个全局的ans算总数。

      解决!

      (小声)题目不难,想说明白还真不一定……

      陈老师!我知道你在看题解!明天讲题选我选我就选我!(可怜巴巴)

      代码

      #include<iostream>
      using namespace std;
      int n(0);
      int k(0);
      int a[30]{};//题目中的x数列 
      bool f[30]{};//标记此数有没有使用 
      int ans(0);//总个数 
      int main(){
      	void dfs(int,int);//搜索函数 
      	cin>>n>>k;
      	for(int i(1);i<=n;i++)
      		cin>>a[i];
      	dfs(0,0);
      	cout<<ans;
      	return 0;
      }
      void dfs(int t/*用了多少个*/,int x/*用到多少个*/){
      	bool p(int);//判断是否为素数 
      	if(t==k){//加了k个数了 
      		int sum(0);//和 
      		for(int i(1);i<=n;i++)
      			if(f[i])//如果这个数被加了 
      				sum+=a[i];
      		if(p(sum))//如果和为素数 
      			ans++;
      	}
      	else{
      		if(x==n)//到头了 
      			return;
      		for(int i(x+1);i<=n;i++){
      			f[i]=1;
      			dfs(t+1,i);//搜索 
      			f[i]=0;//回溯 
      		}
      	}
      }
      bool p(int x){
      	for(int i(2);i<x;i++)
      		if(!(x%i))
      			return 0;
      	return 1;
      }
      

      42小代码……

      提醒

      要回溯哦……

      • 1

      Information

      ID
      36
      Time
      1000ms
      Memory
      125MiB
      Difficulty
      2
      Tags
      # Submissions
      110
      Accepted
      36
      Uploaded By