• poj2245


    题目分析:
    抽奖
    在德国乐透你需要从49个数(1,2,3......49)里面选择6个数,玩德国乐透一个流行的策略-尽管他不会增加你获奖的机会-选择一个子集S包含k(k>6)个数从这49个数字里面选择,然后从这S个数里面选择,例如K=8并且S={1,2,3,5,8,13,21,34}有28种可能。[1,2,3,5,8,13], [1,2,3,5,8,21], [1,2,3,5,8,34], [1,2,3,5,13,21], ... [3,5,8,13,21,34]. 
    你的工作就是找出来所有的可能
    好吧,我是想到了深搜- -
    也应该是分治策略。
    *************************************************************************************************************
    #include<stdio.h>

    #define maxn 100

    int f[maxn];

    void Find(int a[], int N, int k)
    {
        int i;

        if(k == 6)
        {
            for(i=0; i<6; i++)
                printf("%d%c", f[i], i==5?' ':' ');
            return ;
        }

        for(i=0; i<N; i++)
        {
            f[k] = a[i];
            Find(a+i+1, N-i-1, k+1);
        }
    }

    int main()
    {
        int n, k=0;

        while(scanf("%d", &n), n)
        {
            int i, a[maxn];

            if(k++)printf(" ");

            for(i=0; i<n; i++)
                scanf("%d", &a[i]);


            Find(a, n, 0);
        }

        return 0;

    } 

  • 相关阅读:
    二分查找
    选择排序算法
    1.2.2凑零钱问题(暴力递归+动态规划)
    1.2.1斐波那契数列4种解法(暴力递归+动态规划)
    二维数组查找
    插入排序算法
    母亲的爱今天是母亲节,和妈妈通话后回忆起往事
    冒泡排序算法
    Pandas使用入门
    pandas.contact函数
  • 原文地址:https://www.cnblogs.com/liuxin13/p/4383988.html
Copyright © 2020-2023  润新知