zoukankan      html  css  js  c++  java
  • 素数环问题

    素数环问题

    时限:1000ms 内存限制:10000K  总时限:3000ms

    描述
    把1到20这重新排列,使得排列后的序列A满足:
    a. 任意相邻两个数之和是素数
    b. 不存在满足条件a的序列B使得:A和B的前k(0 <= k <= 19)项相同且B的第k+1项比A的第k+1项小。
     
    输入
    没有输入。
     
    输出
    输出A,两个数字之间用一个空格隔开,第一个数字前面和最后一个数字后面没有空格。
     
    输入样例
     
     
    输出样例
     
     
    提示
    本题不提供输出样例。
    #include <iostream>
    #include <stdlib.h>
    #include <math.h>
    using namespace std;
    #include <stdio.h>
    #include <math.h>
    #define LEN 20
    int primeRing(int ring[], int b[], int n);
    int isPrime(int n);
    int main(void)
    {
     int i, ring[LEN]={0}, b[LEN]={0};
     ring[0] = 1;
     b[0] = 1;
     if( primeRing(ring, b, 1) )
     {
      //printf("
    
    The prime ring is : ");
      for(i=0; i<LEN; i++)
       printf("%d ", ring[i]);
      //printf("
    ");
     }
     else
      printf("
    
    Not found!
    ");
     return 0;
    }
    
    int primeRing(int ring[], int b[], int n)
    {
     int i;
     if( n==LEN )
      return isPrime(ring[n-1]+ring[0]);
     //printf("
    Calculating ring[%d] = ", n);
     for(i=1; i<LEN; i++)
      if( b[i]==0 && isPrime((i+1)+ring[n-1]) )
      {
       b[i] = 1;
       //cout<<"  "<<i+1<<endl;
       ring[n] = i+1;
       //printf("%d ", ring[n]);
       if( primeRing(ring, b, n+1) )
        return 1;
       else
        b[i] = 0;
      }
     return 0;
    }
    
    int isPrime(int n)
    {
     int i, t, f=1;
     t = sqrt(n);
     for(i=2; i<=t; i++)
      if( n%i==0 )
      {
       f = 0;
       break;
      }
     return f;
    }
    

    代码来自:http://blog.sina.com.cn/s/blog_52e9ba5f0100a1y9.html

    我的代码:

    #include <iostream>
    #include <math.h>
    using namespace std;
    
     int data[20] = {0};
     bool choice[21] = {false};
    
     bool IsPrimenum(int num)
     {
         //cout<<"have a look"<<endl;
         for(int i = 2;i <= sqrt(num); i++)
            if(num%i==0)
                return false;
         return true;
     }
    
     void FindPlan(int pos)
     {
         if(pos==20&&IsPrimenum(data[19]+data[0]))
         {
             for(int i = 0;i < 20; i++)
                cout<<data[i]<<" ";
             cout<<endl;
             return ;
         }
         else
         {
             for(int i = 1;i <= 20; i++)
             if(choice[i]==false&&IsPrimenum(data[pos-1]+i))
             {
    
                 data[pos] = i;
                 choice[i] = true;
                 //if(pos>=1&&IsPrimenum(data[pos-1]+data[pos]))
                 FindPlan(pos+1);
                 choice[i] = false;
             }
             
         }
     }
    
    int main()
    {
    
        int pos = 0;
        FindPlan(pos);
        return 0;
    }
    

      

    态度决定高度,细节决定成败,
  • 相关阅读:
    WPF 碰撞检测
    设置完在Canvas的位置后,控件HitTest不响应的问题
    Comparing the Performance of .NET Serializers(zz)
    Converting Stream to String and back…what are we missing?
    C# 序列化(Serialize)与反序列化(Deserialize)ZZ
    如何:从代码创建 UML 类图(ZZ)
    nginx 502 bad gateway
    mysql innodb_buffer_pool_size mysql占用内存大小和主从复制并行线程数量
    lvreduce -L 1000M /dev/vg0/lv0 表示最后缩减至多大,不是减少了多大
    nginx 4层tcp代理获取真实ip
  • 原文地址:https://www.cnblogs.com/lxk2010012997/p/4379947.html
Copyright © 2011-2022 走看看