蓝桥杯--第七届决赛:打靶

时间:2022-12-15 16:42:26
打靶


小明参加X星球的打靶比赛。
比赛使用电子感应计分系统。其中有一局,小明得了96分。


这局小明共打了6发子弹,没有脱靶。
但望远镜看过去,只有3个弹孔。
显然,有些子弹准确地穿过了前边的弹孔。


不同环数得分是这样设置的:
1,2,3,5,10,20,25,50


那么小明的6发子弹得分都是多少呢?有哪些可能情况呢?


下面的程序解决了这个问题。
仔细阅读分析代码,填写划线部分缺失的内容。

注意:只填写划线处缺少的内容,不要填写已有的代码或符号,也不要填写任何解释说明文字等。


public class Main
{
static void f(int[] ta, int[] da, int k, int ho, int bu, int sc)
{
if(ho<0 || bu<0 || sc<0) return;
if(k==ta.length){
if(ho>0 || bu>0 || sc>0) return;
for(int i=0; i<da.length; i++){
for(int j=0; j<da[i]; j++)
System.out.print(ta[i] + " ");
}
System.out.println();
return;
}

for(int i=0; i<=bu; i++){
da[k] = i;
f(ta, da, k+1,ho-da[k]/Math.max(da[k], 1), bu-i, sc-ta[k]*i); // 填空位置,因为只有三个洞,所以 如果该环被打中,、
                                                              则下一次递归则少一个洞,但是有可能没打中da[k]=0;所以这里用1和它比较
                                                              如果是0时 也不会因为是0而出现错误 当他被打中时 无论是几次 除以它本身 
                                                              都是减一次				da[k] = 0;	}		public static void main(String[] args)	{		int[] ta = {1,2,3,5,10,20,25,50};		int[] da = new int[8];		f(ta, da, 0, 3, 6, 96);	}}