24h購物| | PChome| 登入
2009-08-20 22:19:42| 人氣1,722| 回應0 | 上一篇 | 下一篇

ACM 524 Q524: Prime Ring Problem

推薦 0 收藏 0 轉貼0 訂閱站台

作法 : 重複排列改編.

在途中就做判斷來減少搜尋的次數

/**********************************************************/

#include<stdio.h>
#include<stdlib.h>
int num[20],line[20]={0},prime[32]={0};
int n,sum;
void make (int k)
{
  int a;
  if(k>sum)
    {
      if(prime[line[1]+line[k-1]]==0)
      {
       for(a=1;a<=sum-1;a++)
         printf("%d ",line[a]);
        printf("%d\n",line[a]);
      } 
        return;
    }
  else
    {
      for(a=2;a<=n;a++)
        if(num[a]>0)
          {
            num[a]--;
            line[k]=a;
            if(prime[line[k]+line[k-1]]==0)
               make(k+1);
            num[a]++;
          }
    } 
}
void Prime()
{
  int a,b;
  for(a=2;a<=31;a++)
     if(prime[a]==0)
       for(b=2;a*b<31;b++)
         prime[a*b]=1;
        
}
main()
{
 line[1]=1;
 Prime();
 int time=0;
 while(scanf("%d",&n)==1)
  {
    sum=n;
    if(time>0) printf("\n");
    int a;
    for(a=2;a<=n;a++)   num[a]=1;
    printf("Case %d:\n",++time);
    make (2);
  } 
 return 0;  
}

台長: 來源不明
人氣(1,722) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 數位資訊(科技、網路、通訊、家電) | 個人分類: ACM |
此分類下一篇:ACM 147 Q147: Dollars
此分類上一篇:ACM 10519 Q10519: !!REALLY STRANGE!!

是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文