首页 > 代码库 > 2016蓝桥杯决赛C/C++A组第三题 打靶

2016蓝桥杯决赛C/C++A组第三题 打靶

题意:

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

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

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

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

分析:

#include <stdio.h>#define N 8void f(int ta[], int da[], int k, int ho, int bu, int sc){//ta[i]--环数i得分,da[i]--打中环数i的子弹数,k--环数id,ho--弹孔数,bu--子弹个数,sc--得分	int i,j;	if(ho<0 || bu<0 || sc<0) return;	if(k==N){		if(ho>0 || bu>0 || sc>0) return;		for(i=0; i<N; i++){			for(j=0; j<da[i]; j++)				printf("%d ", ta[i]);		}		printf("\n");		return;	}	for(i=0; i<=bu; i++){//枚举环数k上可能打中的子弹个数,若打中个数为0,则不造成弹孔		da[k] = i;		f(ta, da, k+1,(i == 0) ? ho : ho - 1 , bu-i, sc-ta[k]*i);  //填空位置	}	da[k] = 0;}int main(){	int ta[] = {1,2,3,5,10,20,25,50};	int da[N];	f(ta, da, 0, 3, 6, 96);	return 0;}

  

2016蓝桥杯决赛C/C++A组第三题 打靶