荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: bakey (深海的鱼爱上会潜水的猫), 信区: Program
标  题: Re: 面试遇到的问题
发信站: 荔园晨风BBS站 (2005年04月13日11:55:11 星期三), 站内信件

#include <iostream.h>
#include <string.h>
#include <fstream.h>
int list[30],prime[100],flag[30],n;
void sieve()
{
    int i,j;
    memset(prime,0,sizeof(prime));
    prime[0] = prime[1] = 1;
    for (i = 2 ; i < 50 ; i ++){
        if (prime[i] == 0){
            for (j = 2*i ; j < 100 ;j += i)
                prime[j] = 1;
        }
    }
}
void print()
{
    int i;
    for (i = 1; i <= n; i ++)
    {
        if (i != n)
            cout << list[i] << " ";
        else
            cout << list[i] << endl;
    }
}
void dfs(int now)
{
    int i;
    if (now == n)
    {
        for (i = 2; i <= n;i ++)
        {
            if (flag[i] == 0)
            {
                if (prime[i+list[now-1]] == 0 && prime[i+1] == 0)
                {
                    list[now] = i;
                    print();
                }
            }
        }
    }
    else
    {
        for (i = 2; i <= n;i ++)
        {
            if (flag[i] == 0 && prime[i+list[now-1]] == 0)
            {
                list[now] = i;
                flag[i] = 1;
                dfs(now+1);
                flag[i] = 0;
            }
        }
    }
}

int main()
{
    int count = 0;;
    sieve();
    while (cin >> n){
        if (count > 0)
            cout << endl;
        count ++;
        cout << "Case " << count << ":" << endl;
        list[1] = 1;
        memset(flag,0,sizeof(flag));
        flag[1] = 1;
        if (n % 2 == 0){
            dfs(2);
        }
    }
    return 0;
}
【 在 ember (灰烬) 的大作中提到: 】
1,2,3,4,。。。。。20
这20个数字,按某种顺序排列起来,让相邻以及首尾的两个数字加起来都是素数
编程求出并打印所有的排列


--
很想注册一个马甲。。。


--
               全国BBS都关了,我们去睡觉了
              我是个大猪头
※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.111.149]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店