第三届蓝桥杯java预赛第4题

3. 某电视台举办了低碳生活大奖赛。题目的计分规则相当奇怪:每位选手需要回答10个问题(其编号为110),越后面越有难度。答对的,当前分数翻倍;答错了则扣掉与题号相同的分数(选手必须回答问题,不回答按错误处理)。    

每位选手都有一个起步的分数为10分。    

某获胜选手最终得分刚好是100分,如果不让你看比赛过程,你能推断出他(她)哪个题目答对了,哪个题目答错了吗?    

如果把答对的记为1,答错的记为0,则10个题目的回答情况可以用仅含有10的串来表示。例如:0010110011 就是可能的情况。    

你的任务是算出所有可能情况。每个答案占一行。

背包问题的精髓是:对于i个存在两种情况,1.成立。2.不成立。成立的话继续,不成立的话也继续下一个。。。

例如超市购物:

  1.  problem9(total,size + 1);//未放入物品a【size】的情况     
  2.             if(total - a[size] >= 0)//判断放入a【size】后,是否会超出背包的承载     
  3.             {     
  4.                 b[size]++;//使得a【size】对应物品的数量加1     
  5.                 problem9(total - a[size],size);//放入物品a[size]的情况     
  6.                 b[size]--;//使得相应的物品数量减1     之所以-1,只因为继续之后还要还原。而下面的例子没有还原是因为在成立和不成立的时候都有标志。而这个没有标志。所以要-1,还原一下 
  7.             }     


import java.util.Arrays;






public class 低碳生活大奖赛 {


	static int result[]=new int[11];  //从1为第一题,该数组表示result【i]是否答对
	static void f(int n ,int total){
		if(n==11){   // 到了最后一个。必须要==11,不能用n<11。因为假如第4个的时候为100,就意味的后面全都是0,就必须-
		if(total==100)
		Print();
		}
		else {
			result[n]=0;              //  假如不成立,
			f(n+1, total-n);             //继续下一个
			result[n]=1;                 //假如成立
			f(n+1, total*2);                  //继续下一个
			  
			
	}
	}
	static int fy(int total){
		if (total>0) {
			return total*2;
		}
		else {
			return total/2;
		}
	}
	private static void Print() {
for (int i = 1; i < 11; i++) {
	System.out.print(result[i]);
}		
System.out.println();
	}
	public static void main(String[] args) {


		Arrays.fill(result, 0);
		int total=10;
		int n=11;
		f(1,total);
	}


}


你可能感兴趣的:(第三届蓝桥杯java预赛第4题)