21个挑战题,几杯咖啡的时间,来试试

题目

挑战:将数字1-13分别放入三个桶中,满足任何桶中任意两个数的差与这两个数不在同一个桶中。

(例如,如果将数字5和7放入一个桶中,那么不能将数字2放入同一个桶中)

下方是解决方案:(文字颜色为白色,选中下一行即可查看)

[[2, 3, 7, 11, 12], [5, 6, 8, 9], [1, 4, 10, 13]]

或 [[2, 3, 11, 12], [5, 6, 7, 8, 9], [1, 4, 10, 13]]

同学很早以前问的一个题,做了之后就忘了告诉人家。近几天突然想起来,就扒了出来。

用回溯法做的

结果中有很多重复的,所以每种组合只输出一次

/*
挑战:将数字1-13分别放入三个桶中,满足任何桶中任意两个数的差与这两个数不在同一个桶中。
(例如,如果将数字5和7放入一个桶中,那么不能将数字2放入同一个桶中)
下方是解决方案:(文字颜色为白色,选中下一行即可查看)
[[2, 3, 7, 11, 12], [5, 6, 8, 9], [1, 4, 10, 13]]
 或 [[2, 3, 11, 12], [5, 6, 7, 8, 9], [1, 4, 10, 13]]
*/
#include <iostream>
#include <cstring>

using namespace std;

int a[13]={1,2,3,4,5,6,7,8,9,10,11,12,13};
int a1[13],a2[13],a3[13];
int n1,n2,n3,count;

bool IsCorrect(const int *ax,const int c,const int num)
{
    int i,j,sub;
    if(-1==c)
        return true;
    for(i=0;i<=c;i++)
    {
        sub=num-ax[i];
        for(j=0;j<=c;j++)
            if(ax[j]==sub)
                return false;
    }

    return true;
}

void Fill(int n)
{

    if(14==n&&1==a1[0]&&2==a2[0])
    {
        /*++count;
        cout<<"Case "<<count<<":"<<endl;*/
        int tn1,tn2,tn3;
        tn1=tn2=tn3=0;
        ++count;
        cout<<"Case "<<count<<":"<<endl;

        //输出 a1,a2,a3
        while(tn1<=n1)
        {
            cout<<a1[tn1++]<<" ";
        }
        cout<<endl;

        while(tn2<=n2)
        {
            cout<<a2[tn2++]<<" ";
        }
        cout<<endl;

        while(tn3<=n3)
        {
            cout<<a3[tn3++]<<" ";
        }
        cout<<endl;

        return;
    }

    if(IsCorrect(a1,n1,n))
    {
//      cout<<n<<" a1"<<endl;
        a1[++n1]=n;
        Fill(n+1);
        a1[n1]=0;
        n1--;
    }

    if(IsCorrect(a2,n2,n))
    {
//      cout<<n<<" a2"<<endl;
        a2[++n2]=n;
        Fill(n+1);
        a2[n2]=0;
        n2--;
    }

    if(IsCorrect(a3,n3,n))
    {
//      cout<<n<<" a3"<<endl;
        a3[++n3]=n;
        Fill(n+1);
        a3[n3]=0;
        n3--;
    }

    return;
}

int main()
{
    memset(a1,0,sizeof(a1));
    memset(a2,0,sizeof(a2));
    memset(a3,0,sizeof(a3));

    n1=n2=n3=-1;
    count=0;

    Fill(1);

    return 0;
}

时间: 2024-11-10 06:53:42

21个挑战题,几杯咖啡的时间,来试试的相关文章

21个挑战题

我时不时地会给我的朋友和同事一些难题.我把这些称为咖啡时间的挑战.题目被设计成很小的,但在短暂休息时要反复考虑的题目. 这些都是典型的不难的题目,并且通常都有多种解决方案.有时,人们用铅笔.纸和数学首要原则来解决这些问题.此外,人们也会通过写正则表达式.LINQ.Perl或Python脚本来解决.解决方式有时优雅,有时用蛮力,这里并没有所谓正确或错误的方法,只要得到的是一个正确的答案. 我尽量选择不涉及聪明"陷阱"或"技巧"的难题.这类型的题目对于那些知晓其中秘密的

【管理心得之六十三】非正式沟通 ----- 一杯咖啡

场景再现① ------------------ 小 张:喂,有时间没?休息区 喝杯咖啡? PM : (稍稍迟疑了一下) 大家在加班赶进度,我和你去喝咖啡? 小 张:怎么地?舍不得?仅仅一杯咖啡时间而已吗! PM : (满脸无奈) 走吧,就10分钟哦!多一分钟都不陪你. 小 张:这就对了,劳逸结合吗. ----------------- “如果场景只到这,也不足为奇,多说是“忙里偷闲”喝杯咖啡而已,能引出什么<管理心得>?” “是呀,我也这样认为.先别着忙啊,还没完呢.....” 场景再现②

挑战题之排列生成

挑战题之排列生成 Time Limit:   2000MS       Memory Limit:   65535KB Submissions:   435       Accepted:   170 Description 一自然数N,设N为3,则关于N的字典序排列为123,132,213,231,312,321.对于一个自然数N(1<= N <= 9 ) , 你要做的便是生成它的字典序排列. Input 第一行为自然数N. Output 输出对应于N的字典序排列,每个排列占一行. Samp

一杯咖啡 三种价格

> 因工作需要,我去了一趟法国.刚到没多久,一个在法国的老朋友就邀请我去一家咖啡店叙旧.我欣然受邀,连忙赶到了咖啡店.这是一间不论外表还是招牌都很普通的咖啡店,名叫“席拉的小店”.虽然整个空间装潢简洁,但充满了温馨的格调,顾客们纷至沓来,生意很火的样子.> > 还未点咖啡,就被法国人的热情奔放所震动.旁边一位胖胖的男士刚一入座便毫无征兆地去拥抱邻桌一位女士,那位女士也很开心地迎了上去.随即,那位胖男士点了一杯咖啡便坐了下来,我亲眼看到服务员过来只收了他1.4欧元.一杯咖啡居然这么便宜,难

递归小题中的空间换时间思想

题目: 如数: 1  1  2  3   5   8   13   21  34  55 ...... 序号: 0  1  2  3   4   5   6     7    8    9 ...... 由用户输入序号,输出对应的数值. 效果: 实现代码: #include <stdio.h> int bian(int num); //static int shu[100]={1,1}; int main() { int num; while ( printf("请输入编号数:&qu

TZOJ 挑战题库随机训练03

点击题号跳转 A3763 B1360 C3646 D1231 E3035 F3635 G3686 H5310 I2920 J1223 A.Unique Encryption Keys回到顶部 题意 m([1,10^6])个数a[i]([0,2^30]),q([0,10^6])次询问,每次询问区间[L,R]是否存在相同的数字 题解 思考一个问题,令pre[i]为值为i的前一个数字的位置 询问区间[L,R]相当于区间内的所有数,pre[a[i]]都在外面即pre[a[i]]<l则合法OK 转化一下,

一杯咖啡带你读懂状态机

状态机的简单介绍 最近公司做棋牌的项目,当时还是不理解什么是状态机,当一个项目做完之后,大脑里已经有了一个状态机的概念,所以今天就与大家分享出来,由于本人的技术博浅,有很多地方没有理解通透的地方,请望大神指点,抱拳了. 什么是状态机? 我理解的状态机就是,当一个事件触发之后,就会去寻找一个相对应的大的状态,然后在到大的状态里去寻找小的状态,然后执行完毕,给用户返回. 可能本人理解的不是多通透,在此边查资料边学习,与大家一起分享. 一丶状态模式 状态模式(State):当一个对象的内在状态改变时允

一杯咖啡时间学会 Django

一.Django 简介 Django 是一个由 Python 写成的开放源代码的 Web 应用框架.它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是 CMS(内容管理系统)软件.并于2005年7月在 BSD 许可证下发布.这套框架是以比利时的吉普赛爵士吉他手 Django Reinhardt 来命名的.由于 Django 的是在一个快节奏的新闻编辑室环境下开发的,它的目的是使常见的 Web 开发任务,快速和容易. MTV 模式 Django 采用了 MTV 设计模式

Wannafly挑战赛21 C 大水题

题目描述 现在给你N个正整数ai,每个数给出一"好数程度" gi(数值相同但位置不同的数之间可能有不同的好数程度).对于在 i 位置的数,如果有一在j位置的数满足 j < i 且 ai=aj,则你可以将位于[i,j]闭区间内的序列评为"好序列",然后获得∑gk(j≤k≤i)(此闭区间内"好数程度"之和)分数. 注意: 在所有情况下,每个数都只能被一个"好序列"包含(只能与其他相应数被评为"好序列"一次