zoukankan      html  css  js  c++  java
  • HDOJ 1016

    素数环,DFS能算到14就差不多了。。
    #include <iostream>
    #include <cmath>

    using namespace std;

    int is_prime(int n)
    {
        int ok=1;
        if(n==1||n==0) return 0;
        if(n==2)  return 1;
        int m=sqrt(n)+1;
        for(int i=2;i<=m;i++)
        {
            if(n%i==0)
            {
                ok=0;
                break;
            }
        }
        if(ok)  return 1;
    }

    void dfs(int* c,int cur,int* vis,int* isp,int n)
    {
        if(cur==n+1&&isp[c[1]+c[n]])
        {
            for(int i=1;i<=n;i++)
              {
                  if(i!=n)
                  cout<<c<<" ";
                  else if(i==n)
                  cout<<c;
              }
            cout<<endl;
        }
        else for(int i=2;i<=n;i++)
        {
            c[cur]=i;
            if(!vis&&isp[c[cur-1]+i])
            {
                vis=1;
                dfs(c,cur+1,vis,isp,n);
                vis=0;
            }
        }
    }

    int main()
    {
        int isp[100]={0};
        for(int i=1;i<100;i++)
        {
            if(is_prime(i))  isp=1;
        }
    int n;
    int static tot=0;
    while(cin>>n)
    {
        int vis[30]={0};
        int c[30]={-1,1};

    cout<<"Case "<<++tot<<":"<<endl;
        dfs(c,2,vis,isp,n);
    }
        return 0;
    }

    能AC的:
     #include <iostream>
    #include <stdlib.h>
    #include <stdio.h>
    using namespace std;
    void is_prime(int* isp)
    {
       for(int i=2;i<=10;i++)
       {
      if(i==0) continue;
      else
          for(int j=i+1;j<100;j++)
       {
        if(j%i==0)
        {
         isp[j]=0;
        }
       }
       }
    }
     
    void search(int cur,int*a,int* vis,int* isp,int n)
    {
     if(cur==n+1)
     {
      if(isp[a[n]+a[1]])
      {
      for(int i=1;i<=n;i++)
      {
       if(i!=n)
       cout<<a<<" ";
             if(i==n)
        cout<<a;
      }
      cout<<endl;
      }
     }
        else
     {
      for(int i=2;i<=n;i++)
      {
       a[cur]=i;
       if(vis==0&&isp[a[cur-1]+i])
       {
        vis=1;
        search(cur+1,a,vis,isp,n);
        vis=0;
       }
      }
     }
    }
    int main()
    {
     int a[25];
     int isp[100];
     memset(isp,-1,sizeof(isp));
        isp[0]=isp[1]=0;
        is_prime(isp);
    int n;  int tot=0;
    while(scanf("%d",&n)!=EOF)
    {
     cout<<"Case "<<++tot<<":"<<endl;
        int vis[25]={0};
     a[1]=1;
        search(2,a,vis,isp,n);
     cout<<endl;
    }
       return 0;
    }

    结尾换行,没有空格! 

  • 相关阅读:
    linux集群实施与部署-----Nginx
    以太网链路聚合简单配置
    配置基于源地址的策略路由
    shell --Day 6
    ps初学--Day 1部分工具使用
    shell --Day 5
    shell ——Day 4
    shell——Day3
    shell——Day 2
    初学shell——Day1
  • 原文地址:https://www.cnblogs.com/CKboss/p/3351134.html
Copyright © 2011-2022 走看看