牌型种数
小明被劫持到X赌城,被迫与其他3人玩牌。
一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张。
这时,小明脑子里突然冒出一个问题:
如果不考虑花色,只考虑点数,也不考虑自己得到的牌的先后顺序,自己手里能拿到的初始牌型组合一共有多少种呢?
请填写该整数,不要填写任何多余的内容或说明文字。
这题的主要在于递归的调用,k代表的是哪一种牌,可以选择0~4张,如果最后的牌总数大于13,不符合要求,直接return,如果牌的总数为13符合题目的要求,就让ans++,最后得到的ans就是最终答案。
public class A07_牌型种数 {
private static int ans;
public static void main(String[] args) {
f(0, 0);
System.out.println(ans);
}
// 13堆牌, 每堆4个, 每堆可选0~4个, 只要牌的总数为13即可
// k: 哪种牌; cnt: 总共分配了几张牌
private static void f(int k, int cnt) {
if (k > 13 || cnt > 13)
return;
if (cnt == 13) {
ans++;
return;
}
// cnt:每一种牌出现的次数, cnt逐步上升
// cnt==13, 牌型种数+1, 返回
for (int i = 0; i < 5; i++) {
f(k + 1, cnt + i);
}
}
}
饮料换购
乐羊羊饮料厂正在举办一次促销优惠活动。乐羊羊C型饮料,凭3个瓶盖可以再换一瓶C型饮料,并且可以一直循环下去,但不允许赊账。
请你计算一下,如果小明不浪费瓶盖,尽量地参加活动,那么,对于他初始买入的n瓶饮料,最后他一共能得到多少瓶饮料。
输入:一个整数n,表示开始购买的饮料数量(0<n<10000)
输出:一个整数,表示实际得到的饮料数
例如:
用户输入:
100
程序应该输出:
149
用户输入:
101
程序应该输出:
151
资源约定:
峰值内存消耗(含虚拟机) < 256M
CPU消耗 < 1000ms
请严格按要求输出,不要画蛇添足地打印类似:“请您输入…” 的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意:不要使用package语句。不要使用jdk1.7及以上版本的特性。
注意:主类的名字必须是:Main,否则按无效代码处理。
题目非常简单
import java.util.Scanner;
public class A08_饮料换购 {
// 模拟
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int ans = 0;
while (n >= 3) {
n -= 2;
ans += 3;
}
ans += n;
System.out.println(ans);
}
}