Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1575285
  • 博文数量: 399
  • 博客积分: 8508
  • 博客等级: 中将
  • 技术积分: 5302
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-14 09:28
个人简介

能力强的人善于解决问题,有智慧的人善于绕过问题。 区别很微妙,小心谨慎做后者。

文章分类

全部博文(399)

文章存档

2018年(3)

2017年(1)

2016年(1)

2015年(69)

2013年(14)

2012年(17)

2011年(12)

2010年(189)

2009年(93)

分类: LINUX

2009-12-17 10:54:04

#include
typedef int array[10];
array s1,s2,s3;
//函数将时间t(分钟)及t-15转换为长度为伴的数字序列
void stime(int t,int *s)
{
    int tt;
    tt=t-15;
    if(tt<0)
        tt+=1440;
    //t,tt是2个表的分钟数,tt比t晚15分钟
    s[3] = t%10;         //分
    s[2] = (t/10)/6;     //分
    s[1] = (t/60)%10;    //时
    s[0] = t/600;        //时
    s[7]=tt%10;        //分
    s[6]=(tt/10)%6;        //分
    s[5]=(tt/60)%10;    //时
    s[4]=tt/600;        //时
}
//如时间t=500,s[8]={0,8,2,0,0,8,0,5}
short num[10] = {4,55,66,18,49,24,8,54,0,16}; //10个数字的补码
short disp[8];
//将读入的3行数据s1,s2,s3编码
void code(char* s1,char *s2,char *s3)
{
    int i,f;
    for(i=0;i<8;++i)   //8个数字
    {
        //某个位置不为空格对应位便可设为1
        //前一个时间和后一个时间间隔一个空格
        f=i/4;       //i<4表示前边4个数字,前面没有空格,否则要多一个空格,f表示空格数,
        if(s1[i*3+1+f]!=' ')   //每个数字占3个位置,左中右,这里是第i个数的中间位置,中间是这一行的惟一有效位置
            disp[i]=1;     //此4位数的最低位
        else
            disp[i]=0;     //第一行0号LCD管,占中间位置
        for(int k=0;k<3;++k)   //第二行1,2,3号灯管
            if(s2[i*3+k+f]!=" ")                  
                disp[i] |= 1<<(k+1);
        for(int k=0;k<3;++k)   //第三行4,5,6号灯管
            if(s3[i*3+k+f]!=' ')
                disp[i] |= 1<<(k+4);
    }
}
main()
{
    int d,f,t,count,k;
    scanf("%d\n",&d)
    while(d--)
    {
        //输入进行编码    
        gets(s1);
        gets(s2);
        gets(s3);
        code(s1,s2,s3);  //对输入图形进行编码,用以与下面的穷举序列进行与运算
        for(t=count=0;t<=1440&&count<2;++t)
        {
            //这个循环遍历每一分钟,count统计可能解的组数
            stime(t,s);  //时间转换为8个数字
            for(k=f=0;k<8&&!f;++k)   //检查官个数字是否与输入数据冲突
                f=num[s[k]]&disp[k];  //如果数字的补码“与”读入的数据编码结果非0,则不是该数字
            if(!f) //f=0表示出个数字与输入数据不冲突,是可能解
            {
                ++count;
                for(k=0;k<4;++k)
                    hms[k]=ss[k];
            }
        }
        //记录该解
        //如果有且只有一个时间满足要求,输出该时间
        if(count==1)
            printf("%d%d%d\n",hms[0],hms[1],hms[2],hms[3]);
        else
            printf("Not Sure\n");
    }
}
阅读(1301) | 评论(0) | 转发(0) |
0

上一篇:假金币

下一篇:矩阵

给主人留下些什么吧!~~