2015 Java B组 省赛部分解析及总结

本文通过四个数学问题展示了编程在解决逻辑问题上的应用。首先,利用递归解决了扑克牌排列组合的问题,然后通过枚举方法找到了加法变乘法的特定组合,接着探讨了四人牌局中不同牌型的计算方法,最后模拟了饮料换购活动,揭示了循环换购的规律。这些问题的解决都体现了编程思维在解决实际问题中的价值。
摘要由CSDN通过智能技术生成

三、三羊献瑞

观察下面的加法算式:
在这里插入图片描述
其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。
请你填写“三羊献瑞”所代表的4位数字(答案唯一),不要填写任何多余内容。

【解析】:
在这里插入图片描述
*个位数相加减最多只能进 1
a 和 e 即使是 9 ,也只能进 1,所以 e =1,a = 9;
b + f 进 f ,f 只能为 0 ,所以 f = 0;
c + g > 10;c = b+1;
还剩b、d、g、i

public static void main(String[] args) {
	Scanner scan = new Scanner(System.in);
	for (int b = 2; b < 9; b++) {
		for (int d = 2; d < 9; d++) {
			int c = b + 1;
			if (b != d && d != c)
				for (int g = 2; g < 9; g++) {
					if (g != b && g != d && b + 1 + g > 10 && g != c)
						for (int i = 2; i < 9; i++)
							if (i != g && i != b && i != d && i != c) {
								int t = (9000 + b * 100 + (b + 1) * 10 + d) + (1000 + g * 10 + b);
								if (t == 1 * 10000 + (b + 1) * 100 + b * 10 + i)
									System.out.printf("%2d%d%d%d\n", 1, 0, g, b);
							}
				}
		}
	}
}

六、加法变乘法

我们都知道:1+2+3+ … + 49 = 1225
现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015
比如:
1+2+3+…+1011+12+…+2728+29+…+49 = 2015
就是符合要求的答案。
请你寻找另外一个可能的答案,并把位置靠前的那个乘号左边的数字提交(对于示例,就是提交10)。

【解析】:枚举
两个不相邻的加号边成号 -> 两层循环遍历1-49,找到相邻两个数字进行判断

public static void main(String[] args) {
	int n;
	for(int i=1;i<49;i++) {
		for(int j=i+2;j<47;j++) {
			n=1225;
			n-=(i+i+j+j+2);
			n+=(i*(i+1))+(j*(j+1));
			if(n==2015&&i!=10)
				System.out.println(i);
		}
	}
}

七、牌型种数

小明被劫持到X赌城,被迫与其他3人玩牌。
一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张。
这时,小明脑子里突然冒出一个问题:
如果不考虑花色,只考虑点数,也不考虑自己得到的牌的先后顺序,自己手里能拿到的初始牌型组合一共有多少种呢?

【解析】:递归
13*4张牌分给4个人(A1…)
对于每张牌,你可以有0张、1张…4张

static int ans;
public static void main(String[] args) {
	f(0,0);
	System.out.println(ans);
}

//k:牌的种类,cnt:当前持有几张牌
static void f(int k, int cnt) {
	//越界
	if(k>13||cnt>13) return;
	//遍历完所有牌且持有13张牌
	if(k==13&&cnt==13) {
		ans++;
		return;
	}
	//对于每张牌,你可以有0张、1张...4张共5种情况
	for(int i=0;i<5;i++) {
		f(k+1,cnt+i);
	}
}

八、饮料换购

乐羊羊饮料厂正在举办一次促销优惠活动。乐羊羊C型饮料,凭3个瓶盖可以再换一瓶C型饮料,并且可以一直循环下去,但不允许赊账。

请你计算一下,如果小明不浪费瓶盖,尽量地参加活动,那么,对于他初始买入的n瓶饮料,最后他一共能得到多少瓶饮料。

输入:一个整数n,表示开始购买的饮料数量(0<n<10000)
输出:一个整数,表示实际得到的饮料数

100 ( 101 )

149 ( 151 )

【解析】:模拟
在这里插入图片描述
写步骤,找规律

public static void main(String[] args) {
	Scanner sc=new Scanner(System.in);
	int n=sc.nextInt();
	int ans=n;
	int t=0;
	while(n%3!=n) {
		int x=n+t;
		t=x%3;
		n=x/3;
		ans+=n;
	}
	//注意最后最后一次
	System.out.println(ans+(n+t)/3);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值