• 环序列


    // 回溯求解n项素数和环,c551
    #include<stdio.h>
    #include<math.h>
    void main()
    { int t,i,j,n,k,s,a[2000],b[1000];
      printf("   前n个正整数组成素数和环,请输入整数n: "); 
      scanf("%d",&n);  
      for(k=1;k<=2*n;k++) b[k]=0;
      for(k=3;k<=2*n;k+=2)
         {for(t=0,j=3;j<=sqrt(k);j+=2)
             if(k%j==0)
                {t=1;break;}
             if(t==0) b[k]=1;            // 奇数k为素数的标记  
             }
      printf("   前%d个正整数组成素数和环,其中5个为:
    ",n); 
      a[1]=1;s=0;
      i=2;a[i]=2; 
      while(1)
       {t=1;
        for(j=1;j<i;j++)
          if(a[j]==a[i] || b[a[i]+a[i-1]]!=1) // 出现相同元素或非素时返回   
    {t=0;break;}
        if(t && i==n && b[a[n]+1]==1)
          { s++;
               printf("  %d: 1",s);
           for(j=2;j<=n;j++) printf(",%d",a[j]);
           printf("
    ");  
               if(s==5) return;
          }
    if(t && i<n) 
    {i++;a[i]=2;continue;}
        while(a[i]==n && i>1) i--;        // 实施回溯  
        if(i>1) a[i]++;
        else break;
       }
     }
     
    
    
    
    // n阶德布鲁金环序列回溯设计,c552
    #include <stdio.h>
    #include <math.h>
    void main()
    {??int d,i,h,k,j,m,m1,m2,n,s,t,x,a[200];
      printf("请输入(2<n)n: "); scanf("%d",&n);
      m=1;
      for(k=1;k<=n;k++)  m=m*2;           // 计算m=2^n
      s=0;
      for(k=0;k<=m+n;k++) a[k]=0;
      a[n]=1;a[m-1]=1;
      i=n+1;
      while(1)
        {if(i==m-2)
           {for(h=0,j=n+1;j<=m-2;j++)
               if(a[j]==0) h++;
            if(h==m/2-n)                // 判别是否有m/2-n个零  
              {for(t=0,k=0;k<=m-2;k++)
               for(j=k+1;j<=m-1;j++)
                   {d=1;m1=0;m2=0;    
      // 检验是否有相同的由n相连数字组成的二进制数  
                   for(x=n-1;x>=0;x--)
                    {m1=m1+a[k+x]*d; m2=m2+a[j+x]*d;d=d*2;}
                   if(m1==m2) {t=1;break;}
                   }
               if(t==0)
                 {s++;
                  if(n<=4 || (n>4 && s<=3))
                     {printf("NO(%5d): ",s);
                      for(j=0;j<=m-1;j++)
                         printf("%d",a[j]);
                      printf("
    ");
                     }
                  }
               }
             }
         if(i<m-1)
            {i++;a[i]=0;continue;}
         while(a[i]==1 && i>n+1) i--;          // 向前回溯  
         if(a[i]==1 && i==n+1) break;
           else a[i]=1;
        }
     }
  • 相关阅读:
    利用nginx实现负载均衡和动静分离
    Nginx动静分离实现
    php中session 入库的实现
    php文字水印和php图片水印实现代码(二种加水印方法)
    采集图片水印添加
    [安全]PHP能引起安全的函数
    [安全]服务器安全之 PHP权限目录
    Centos下安装git的web服务器
    Centos下抓包
    UVA 10795
  • 原文地址:https://www.cnblogs.com/liao-pxsoftware15/p/8013065.html
Copyright © 2020-2023  润新知