2012 年蓝桥杯 预赛 第四题 奇怪的比赛 状态压缩

题目:奇怪的比赛

题目描述:

    某电视台举办了低碳生活大奖赛。题目的计分规则相当奇怪:

    每位选手需要回答10个问题(其编号为1到10),越后面越有难度。答对的,当前分数翻倍;答错了则扣掉与题号相同的分数(选手必须回答问题,不回答按错误处理)。

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

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

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

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


思路:

        我闲着没事用状态压缩写了写。。。。。。。。。。。。。


状态压缩代码(java):



public class test4_2 {

	public static void main(String[] args) {

		//枚举每一种状态从  00000 00000  到  11111 11111
		for (int i = 0; i < (1 << 10); i++) {
			judge(i);
		}

	}

	private static void judge(int x) {

		int ans = 10;
		for (int i = 0; i < 10; i++) {
			if (((1 << i) & x) != 0) {
				ans *= 2;
			} else {
				ans -= (i + 1);
			}
		}
		//如果模拟此种结果为100,则输出这种状态
		if (100 == ans) {
			for (int i = 0; i < 10; i++) {
				if (((1 << i) & x) != 0)
					System.out.print("1");
				else
					System.out.print("0");
			}
			System.out.println();
		}
	}
}



答案:

1011010000
0111010000
0010110011




你可能感兴趣的:(蓝桥杯,奇怪的比赛)