3 条题解

  • 1
    @ 2022-10-2 11:06:57

    添加判断素数模块

    #include<bits/stdc++.h>
    using namespace std;
    int n, m, ans, a[25];
    bool vis[25];
    int Search(int k, int j){
    //k表示现在在放第k个数 || 我们现在在树的深度为k 
    	int i;
    	if( k > m ){
    	//当k>m时,表示我们已经放完 
    		//解需要满足“选的m个数的和是素数 ”这个条件才能输出 
    		int sum = 0;
    		for(i = 1; i <= m; ++i){
    			sum += a[i];
    		}
    		//计算选的m个数的和
    		if(isprime(sum)){
    			//和是素数,方案种数+1
    			ans++; 
    		} 
    		return 0;
    		//return 0; 和 else 必须有一个 
    	}
    	for(i = j+1; i <= n; ++i)
    	//n种算符可以尝试 
    	//现在选的算符序号应该大于上一个算符的序号j 
    	//上一个算符的序号j可以由Search函数进行传递     ||      用a数组去记录选的算符序号,具体算符数值另一个数组存储 
    		if(!vis[i]){
    		//第i种算符可以使用 
    			vis[i] = true;
    			//标记第i种算符已经使用 
    			a[k] = i;
    			//第k个位置,使用第i种算符 
    			//保存结果 
    			Search(k+1, i);
    			//去摆第k+1个位置,第k个位置的算符序号为i 
    			vis[i] = false;
    			//还原第i种算符
    			a[k] = 0;
    			//第k个位置上现在没有放算符 
    			//恢复结果 
    		}
    	return 0;
    }
    int main(){
    	//数据初始化
    	memset(a, 0, sizeof(a));
    	//每个位置没有放数,置0 
    	memset(vis, false, sizeof(vis));
    	//每种算符都没有使用过,置true
    	ans = 0;
    	//方案种数置0 
    	
    	//输入 
    	cin>>n>>m;
    	
    	//从第1个位置开始搜索(尝试/暴力模拟) 
    	Search(1);
    	
    	//输出
    	cout<<ans<<endl;
    	 
    	return 0;
    }
    
    • 1
      @ 2022-7-29 20:11:54
      #include<bits/stdc++.h>
      using namespace std;
      long n,k,i,a[25],cnt;
      bool c[25];
      long pd(long n)
      {
          if(n<2)return 0;
          for(long i=2;i<=sqrt(n);i++)if(n%i==0)return 0;
          return 1;
      }
      void dfs(long t,long s,long p)
      {
          long i;
          if(t==k+1)
          {
              if(pd(s))cnt++;
      //      return;
          }
          if(p==n+1)return;
          for(i=p;i<=n;i++)
          {
              if(!c[i])
              {
                  c[i]=1;
                  dfs(t+1,s+a[i],i);
                  c[i]=0;
              }
          }
      }
      int main()
      {
          cin>>n>>k;
          for(i=1;i<=n;i++)cin>>a[i];
          dfs(1,0,1);
          cout<<cnt;
          return 0;
      }
      • -2
        @ 2022-10-2 10:50:12

        #include<bits/stdc++.h> using namespace std; int n,m; int h[1000],v[1000]; int dfs(int u,int p) { if(u>m) { for(int i=1;i<=m;i++) { printf("%3d",h[i]); } cout<<endl; return 0; } for(int i=p+1;i<=n;i++) { if(v[i]==0) { h[u]=i; v[i]=1; dfs(u+1,i); v[i]=0; } } } int main() { cin>>n>>m; dfs(1,0); return 0; }

        • 1

        信息

        ID
        142
        时间
        1000ms
        内存
        256MiB
        难度
        5
        标签
        (无)
        递交数
        354
        已通过
        128
        上传者