先贴代码:(转自:
http://blog.csdn.net/shengxiwgzly/article/details/6327727)
- #include
- using namespace std;
- int yu(int a, int b)
- {
- int t[7], i, num=0;
- for(i=6; i>=0; i--)
- {
- t[i] = (a)|(b);
- a /= 10;
- b /= 10;
- }
- for(i=0; i<7; i++)
- {
- num += t[i];
- num *= 10;
- }
- return num/10;
- }
- int bing(int a, int b)
- {
- int t[7], i, num=0;
- for(i=6; i>=0; i--)
- {
- t[i] = (a)&(b);
- a /= 10;
- b /= 10;
- }
- for(i=0; i<7; i++)
- {
- num += t[i];
- num *= 10;
- }
- return num/10;
- }
- int main()
- {
- int n, x, i, k, num[10]={1111110, 110000, 1101101, 1111001, 110011, 1011011,1011111, 1110000, 1111111, 1111011};
- int p1, p2, p3, p4, q1, q2, q3, q4, h2, m1, m2;
- cin>>n;
- while(n--)
- {
- cin>>p1>>p2>>p3>>p4>>q1>>q2>>q3>>q4;
- k = 1;
- if(q1) { cout<<1; k=0;}
- x = yu(p2, q2);
- for(i=k; i<10; i++)
- if(bing(x, num[i])==q2)
- {
- h2 = i;
- break;
- }
- x = yu(p3, q3);
- for(i=0; i<6; i++)
- if(bing(x, num[i])==q3)
- {
- m1 = i;
- break;
- }
- x = yu(p4, q4);
- for(i=0; i<10; i++)
- if(bing(x, num[i])==q4)
- {
- m2 = i;
- break;
- }
- printf("%d:%d%d\n", h2, m1, m2);
- }
- return 0;
- }
总结:
1.本身是道水题,但是在逻辑处理时脑子起了泡。这是一个集合问题,本以为yu<=y'(y'是实际可亮边集合),然后yu∩num[i]<=y',可是后来发现yu=p∪q,即(p∪q)∩num[i]=q是成立的。(记号简略,估计以后自己也卡不懂了)
2.可以按整数度数,存为十进制,全部用位运算,省略bing()、yu()函数