`

我的一道面试题目

阅读更多

面试的人员最后给了我一个题目,我当时傻眼了。他当时问我数学怎么样,我说,“我数学还可以!”。然后他说,要给我一个数学编程的题目做。我说:“会不会很难啊!”。他微笑的说:"很简单!"


题目是这样出的:5个香蕉,4个梨子,3个苹果。如何用程序实现,将这个些水果排列成不同的组合,并用某种语言来实现!

 

 

我找的一些资料:

 

      数学中的组合运算在统计中是十分常见的运算,但用程序输出所有组合的可能性却并不容易。这里介绍一个非常酷的组合算法:(太TM牛逼了)


组合问题:输出从m个数中的任意抽取n个数的组合全部可能序列。

 

[10反转置换法]

 

算法思想:

     (1)  初始化一个m个元素的数组(全部由0,1组成),将前n个初始化为1,后面的为0。这时候就可以输出第一个组合序列了。

     (2)  从前往后找,找到第一个10组合,将其反转成01,然后将这个10组合前面的所有1,全部往左边推 ,即保证其前面的1都在最左边。这时又可以输出一组组合序列了。

     (3)  重复第(2)步,知道找不到10组合位置。这时已经输出了全部的可能序列了。 为什么?你想,(以m=5,n=3为例)一开始是11100,最后就是00111,已经没有10组合了

 

  1. //10置换法源代码   
  2. public void combination(int m,int n)   
  3. {   
  4.     char[] totalArray=new char[m];     
  5.     //记录排序次数   
  6.     int totalSortNum=0;   
  7.            
  8.     //建立 111...100...0   
  9.     for(int i=0;i<m;i++){   
  10.         if(i<n)   
  11.             totalArray[i]='1';   
  12.         else  
  13.             totalArray[i]='0';   
  14.     }   
  15.     totalSortNum+=1;   
  16.        System.out.println(totalSortNum+"\t"+Arrays.toString(totalArray));   
  17.            
  18.     //"10"反转置换法   
  19.     int index=-1;   
  20.     while((index=String.valueOf(totalArray).indexOf("10"))!=-1){   
  21.         //交换"10"为"01"   
  22.         totalArray[index]='0';   
  23.         totalArray[index+1]='1';   
  24.         //计算刚反转的"10"前面所有的'1'全部移动到最左边   
  25.         int count=0;       
  26.         for(int i=0;i<index;i++){   
  27.             if(totalArray[i]=='1')   
  28.                 count++;   
  29.         }   
  30.         for(int j=0;j<index;j++){   
  31.             if(j<count)   
  32.                 totalArray[j]='1';   
  33.             else totalArray[j]='0';   
  34.         }   
  35.         //输出结果   
  36.         totalSortNum++;   
  37.                System.out.println(totalSortNum+"\t"+Arrays.toString(totalArray));   
  38.     }   
  39. }  

3
0
分享到:
评论
5 楼 w2c2y2 2009-11-02  
liuming 写道
edward32tnt 写道
我觉得是12 个东西 然后减去 香蕉5个  4个梨子  3个苹果  的 排列组合 剩下就是了吧


关键是你怎么把这个“剩下的”的组合输出来。


结果比如是这样的:

香蕉 香蕉 香蕉 香蕉 香蕉 梨子 梨子 梨子 梨子 苹果 苹果 苹果

香蕉 香蕉 香蕉 香蕉 香蕉 梨子 梨子 梨子 苹果 苹果 苹果 梨子

香蕉 香蕉 香蕉 香蕉 梨子 梨子 香蕉 梨子 苹果 苹果 苹果 梨子
4 楼 liuming 2009-11-02  
edward32tnt 写道
我觉得是12 个东西 然后减去 香蕉5个  4个梨子  3个苹果  的 排列组合 剩下就是了吧


关键是你怎么把这个“剩下的”的组合输出来。
3 楼 edward32tnt 2009-10-26  
我觉得是12 个东西 然后减去 香蕉5个  4个梨子  3个苹果  的 排列组合 剩下就是了吧
2 楼 xiao151451664 2009-10-26  
如果是我、
  估计我会给他说我数学不行、
1 楼 presses 2009-10-26  
三层循环可不可以?
int count=1;
for(int banana=0;banana<5;banana++){
    for(int pear=0;pear<4;pear++){
         for(int apple=1;apple<3;apple++){
             log.info(组合:"+count+"banana:"+banana+",pear:"+pear+",apple:"+apple);
             count++;
         }
    }
}

相关推荐

    一道C#面试题目

    标题 "一道C#面试题目" 暗示我们即将探讨的是与C#编程语言相关的面试问题,这可能涉及语言的基础概念、高级特性、面向对象编程、.NET框架、多线程、异常处理、内存管理等多个方面。在C#的面试中,面试官通常会考察...

    华为计算机公司的面试题目

    虽然“www.pudn.com.txt”看起来不像是一道具体的面试题目,但它可能包含了华为公司或者IT行业的最新动态、技术文章或者对华为公司历史、文化、业务的介绍。面试前了解这些信息,能体现你对行业的热情和对公司文化...

    面试c语言题目

    C语言面试题目总结 根据提供的文件信息,总结了以下几个C语言面试题目,涵盖了多态、函数注册、字符串处理、算法设计等方面的知识点。 1. 多态类中的虚函数表是 Compile-Time,还是 Run-Time 时建立的? 答案:...

    C#中new用法(一道面试题目)

    在面试场景中,深入理解`new`的多种用法不仅是对候选人基本技能的考察,也是对其高级编程技巧和设计模式熟悉度的测试。下面将详细解析`new`在C#中的各种应用场景。 ### 创建对象 `new`最基础的用法是在实例化类或...

    c++面试题目总结c++面试题目

    【C++面试题目总结】 1. **编程题:字符串匹配** - 题目要求判断两个字符串a和b是否匹配,匹配条件是b中的汉字出现次数不少于a中的出现次数,并且b中的所有字符都在a中出现。这是一道典型的字符串处理问题,可以...

    新浪潮集团面试题目,新浪潮集团面试题目

    新浪潮集团作为一家知名的IT企业,其面试题目通常会涵盖逻辑思维、数学推理、问题解决等多方面的能力考察。以下是对这些题目所涉及知识点的详细解释: 1) 考古学家判断金币为假币的原因可能是因为公元前3世纪尚未...

    高中语文面试题目答案.pdf

    1. 教育理念:面试题目中提到了高中语文教学的四个核心目标:全面提高学生的语文素养、正确把握语文教育的特点、积极倡导自主、合作、探究的学习方式以及努力建设开放而有活力的语文课程。这表明在语文教育中,不仅...

    迅雷面试笔试题目

    描述中强调了在面试前需要多看书、查看面试题目,这暗示了面试准备的重要性。 - **基础知识**:熟悉编程语言的基础知识,如C语言中的变量、循环、函数等。 - **技术广度**:具备对各种技术栈的基本了解,如数据结构...

    中国移动面试题目

    "中国移动面试题目"。 本资源摘要信息中,涵盖了中国移动面试题目的相关知识点,包括中国移动的三大品牌、六大运营商、文学作品、数学运算、逻辑思维、语言能力和个人评价等方面。 一、中国移动的三大品牌 中国...

    C/C++面试题目及解答.doc

    请完成以下题目。注意,请勿直接调用 ANSI C 函数库中的函数实现。 a)请编写一个 C 函数,该函数给出一个字节中被置 1 的位的个数,并请给出该题的至少一个不同解法。 第一种unsigned int TestAsOne0(char ...

    一道月工资三万的面试题

    根据给定的信息,我们可以推断出这是一道与算法相关的面试题目。虽然提供的部分内容看起来较为混乱,但结合标题、描述及标签,我们可以尝试解析并构建一个相对完整的算法问题。 ### 题目背景 一家知名公司在招聘...

    香港小一面试题目汇总参照.pdf

    香港的小一面试题目汇总,为我们提供了一个全面了解孩子在这些方面表现的窗口。 首先,面试从孩子的自我介绍开始,这一步骤看似简单,实则考验着孩子的表达能力和聆听理解能力。面试官会询问孩子的姓名、年龄、住址...

    SQL面试题目,有例子。

    根据提供的信息,我们可以详细解析这些SQL面试题目以及给出的示例答案,并且深入理解每一道题目背后的原理与应用场景。 ### 風险1: 查询身份证号码为440401430103082的申请日期 #### 问题描述 此题目要求查询在`g_...

    常见Oracle数据库面试题目

    ### 常见Oracle数据库面试题目解析 #### 1. 列出至少有一个员工的所有部门 此题旨在考察考生如何筛选出至少有一名员工所在的部门。解决方案是通过使用`GROUP BY`结合`HAVING`子句来实现。具体步骤如下: - 使用`...

    应聘面试智力题目答案

    本题是一道经典的智力题目,常出现在求职面试的情境之中,特别是那些注重逻辑思维和技术能力的职位。题目通过一个虚构的故事背景——五个海盗如何公平地分配100枚金币——来考验应聘者的逻辑推理能力和决策制定能力...

    最强mysql面试题目总结.docx

    《MySQL面试题目总结》 MySQL是世界上最流行的开源关系型数据库管理系统之一,对于面试者来说,掌握其核心概念和技术是至关重要的。以下是对MySQL面试题目的深入解析: 1. **MySQL优化** - 数据库优化是提升系统...

    软件测试工程师面试题目

    ### 软件测试工程师面试题目解析 #### 题目一:自我介绍 - **问题解析**:在软件测试领域,自我介绍不仅是对个人基本信息的陈述,更是展示自己技术背景、项目经验和职业规划的机会。面试官通过这个问题来了解应聘者...

    Java 后端面试题目参考

    Java后端面试是技术人才求职过程中的一道重要关卡,涉及到的知识点广泛而深入,涵盖了基础语法、数据结构、算法、并发编程、JVM优化、框架应用等多个领域。以下是一些可能在Java后端面试中出现的重点知识: 1. **...

Global site tag (gtag.js) - Google Analytics