现在的位置: 首页 > 综合 > 正文

漏批了一张试卷,穷举- -

2011年04月09日 ⁄ 综合 ⁄ 共 1105字 ⁄ 字号 评论关闭

学校进行了一次英语考试,共有10道是非题,每题为10分,解答用1表示"是",用0表示"非"的方式。但老师批完卷后,发现漏批了一张试卷,而且标准答案也丢失了,手头只剩下了3张标有分数的试卷。

试卷一:
①   ②   ③   ④   ⑤   ⑥   ⑦   ⑧   ⑨   ⑩
0    0    1    0    1    0    0    1    0    0      得分:70
试卷二:
①   ②   ③   ④   ⑤   ⑥   ⑦   ⑧   ⑨   ⑩
0    1    1    1    0    1    0    1    1    1      得分:50
试卷三:
①   ②   ③   ④   ⑤   ⑥   ⑦   ⑧   ⑨   ⑩
0    1    1    1    0    0    0    1    0    1      得分:30

待批试卷:
①   ②   ③   ④   ⑤   ⑥   ⑦   ⑧   ⑨   ⑩
0    0    1    1    1    0    0    1    1    1      得分:?
请编一程序依据这三张试卷,算出漏批的那张试卷的分数。
 
用穷举吧,反正才10个题...

#include cstdio> 

int bits(int a) // 计算a中有多少个位是1
{
    
int c = 0;
    
for(c = 0; a; c++)
    
{
        a 
= a & (a-1);
    }

    
return c;
}


int main()
{
    
int i;
    
int a[4= {0x0a40x1d70x1c50x0e7,};
    
int s[4= {7530};
    
    
for(i = 0; i  1024; i++// 尝试各种答案
    {
        
if (10 - bits(a[0^ i) == s[0&& // a[0] ^ i 表示按照答案i对a[0]批改,得到1的位为不同的(也就是答错的)题
            10 - bits(a[1^ i) == s[1&&
            
10 - bits(a[2^ i) == s[2]) // 得分都满足的答案可能是正确答案
        {
            s[
3= 10 - bits(a[3^ i); // 计算漏批卷子的分数
            printf("%d\n", s[3]);
        }

    }
 
    
return 0;
}

结果很巧,虽然有多种可能的正确答案,但这张卷子都是60分- -

抱歉!评论已关闭.