10只无差别的橘子放到3个不同的盘子里。允许有的盘子空着。请问一共有多少种不同的放法?
A.36
B.66
C.54
D.72
第1题:
有4个不同颜色的球放到不同编号的4个箱子里,不同的摆放方式共有________种。
A.81
B.256
C.35
D.12
第2题:
10个大小相同的橘子放到3个不同的盘子里,允许有的盘子空着。请问一共有多少种不同的放法? A.286 B.220 C.120 D.66
第3题:
有4个相同颜色的球放到不同编号的4个箱子里,不同的摆放方式共有________种。
A.81
B.256
C.35
D.12
第4题:
把6个标有不同标号的小球放入三个大小不同的盒子里。大盒子放3个球,中号盒子放2个,小盒子放1个。问共有多少种放法?( )A.50 B.60 C.70 D.40
本题正确答案为B。本题是一个乘法原理与组合综合运用的问题。首先,把球放入盒子需分三步走,这需用乘法原理。其次,放入盒中的球不计顺序,这是一个组合问题,因此,综合以上两点可知,共有C36×C23×C11=20×3×1=60种放法
第5题:
数学运算:共10道题。你可以在草稿纸上运算,遇到难题,你可以跳过不做,待你有时间再返回来做。
例题:84.78元、59.50元、121.61元、12.43元以及66.50元的总和是()。
A.343.73B.343.83C.344.73D.344.82
解答:正确答案为D。实际上你只要把最后一位小数加一下,就会发现和的最后一位数是
2.只有D符合要求。就是说你应当动脑筋想出解题的捷径。
请开始答题:
6.把7个不能区分的苹果放到3个不同的盘子里(允许有空盘),有多少种不同的放法?
A.21
B.18
C.36
D.38
[答案]C。[解析]题中所述操作相当于:将10个不能区分的苹果放到三个盘子中(每个盘子至少一个苹果),运用隔板法,
第6题:
甜点装盘时,下列说法正确的是( )。
A.盘子应干净卫生、无破损
B.除饰品外,所有主料、配料都不得露在盘子的外沿
C.装盘后盘子四周允许有少量的汤汁
D.盘子应是有相同风格的
第7题:
如果不堆叠,直径为16厘米的盘子里最多可以放多少个边长6厘米的正方体?
A.1
B.2
C.3
D.4
[答案]C。[解析]一个刚好能覆盖4个边长为6厘米的正方形的圆的直径是
厘米>16厘米,故这个盘子不能放下4个边长为6厘米的正方体。估算知可以放下3个,呈“品”字形摆放。。
第8题:
答案:结合二叉树的中序遍历,我们很容易就画出3阶汉诺塔的空间递归树:
中序遍历这个二叉树,遍历某个节点时,输出from和to,with无须输出,就可以得到3阶汉诺塔的移动顺序:
盘子:1A>>>>C
盘子:2A>>>>B
盘子:1C>>>>B
盘子:3A>>>>C
盘子:1B>>>>A
盘子:2B>>>>C
盘子:1A>>>>C
可以看到,汉诺塔算法所生成的二叉树是一个相当完美的“完全二叉树”,所以它的总节点数是2^3-1=7个。
二、先简化一下算法;通过层序遍历,构建双链表;顺序遍历双链表,输出!
1、再仔细观察一下递归树,例如第一层的节点:A--null--C,“分裂成”了第二层的两个节点:A--C--B和B--A--C,而第二层的第一个节点A--C--B,又“分裂成”了:A--null--C和C--null--B。简化一下:如果不考虑with柱,只考虑from和to柱,AC可以分裂成AB和BC,AB可以分裂成AC和CB......相信你已经看出规律了,所以可以进一步简化为下面的递归树:
2、通过队列来构造双链表:
为了实现算法,你需要写这样一个小函数:
private static final String str="ABC";
public String getWith(String from,String to){
String with;
//找出ABC中的某个和from、to都不相等的字符串,赋值给with
return with;
}
你还需要有一个节点类:
/**
* 汉诺塔节点
*
*/
public class HanNode {
/**
* 盘子的编号
*/
private int num;
/**
* from柱
*/
private String from;
/**to柱
*
*/
private String to;
/**
* 双链表中的前驱结点
*/
private HanNode pre;
/**
* 双链表中的后继结点
*/
private HanNode next;
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public String getFrom() {
return from;
}
public void setFrom(String from) {
this.from = from;
}
public String getTo() {
return to;
}
public void setTo(String to) {
this.to = to;
}
public HanNode getPre() {
return pre;
}
public void setPre(HanNode pre) {
this.pre = pre;
}
public HanNode getNext() {
return next;
}
public void setNext(HanNode next) {
this.next = next;
}
public HanNode(int num, String from, String to) {
super();
this.num = num;
this.from = from;
this.to = to;
}
public HanNode() {
super();
}
@Override
public String toString() {
return " [盘子:" + num + ", 从:" + from + "到:" + to + "]";
}
}
还需要设置两个全局变量top和last作为双链表的头和尾,为了和其他的节点区分开来,设置它们的num为0;
下面的任务就是通过队列来构造双链表,对于某一趟运算:
①取出一个节点currentNode出队列,把这个currentNode的from和to传入getWith()函数,然后生成两个新的节点leftNode{num=currentNode.getNum()-1,from=from,to=with}和rightNode{num=currentNode.getNum()-1,from=with,to=to},压入队列。
②把生成的leftNode和rightNode插入到双链表中的currentNode的两端(需要断裂原来的链并生成新的链)
第9题:
如果不堆叠,直径16厘米的盘子里最多可以放多少个边长6厘米的正方体? A.1 B.2 C.3 D.4
第10题:
小玉在收拾玩具,要把3个不同的皮球放到3个不同材质的箱子里,每个箱子最多只能放2个皮球,共有几种不同的放法?( )
A.18
B.21
C.24
D.27