NBUT 1219 Time

来源:互联网 发布:doujinmode新域名 编辑:程序博客网 时间:2024/05/01 14:22
  • [1219] Time

  • 时间限制: 1000 ms 内存限制: 131072 K
  • 问题描述
  • Digital clock use 4 digits to express time, each digit is described by 3*3 characters (including”|”,”_”and” “).now given the current time, please tell us how can it be expressed by the digital clock.
  • 输入
  • There are several test cases.
    Each case contains 4 integers in a line, separated by space.
    Proceed to the end of file.
  • 输出
  • For each test case, output the time expressed by the digital clock such as Sample Output.
  • 样例输入
  • 1 2 5 62 3 4 2
  • 样例输出
  •     _  _  _   | _||_ |_   ||_  _||_| _  _     _  _| _||_| _||_  _|  ||_ 
  • 提示
  • The digits showed by the digital clock are as follows:   _  _     _  _  _  _  _  _  | _| _||_||_ |_   ||_||_|| | ||_  _|  | _||_|  ||_| _||_|
  • 来源
  • 辽宁省赛2010

    题目意思也很简单就是用字符串模拟时钟,注意每个数字占三格,最暴力的方法就是直接定义三个字符数组,按要求输出,还有一点就是0在最后一位,要特殊处理一下。

    #include <algorithm>#include <iostream>#include <cstring>#include <cstdlib>#include <cstdio>#include <string>#include <vector>#include <cmath>#include <ctime>#include <queue>#include <stack>#include <set>#include <map>using namespace std;typedef long long LL;const int maxn= 100000 + 10;char s1[35]="     _  _     _  _  _  _  _  _ ";char s2[35]="   | _| _||_||_ |_   ||_||_|| |";char s3[35]="   ||_  _|  | _||_|  ||_| _||_|";int main() {    int a,b,c,d;    while(~scanf("%d%d%d%d",&a,&b,&c,&d))    {        getchar();        if(a==0)            a=10;        if(b==0)            b=10;        if(c==0)            c=10;        if(d==0)            d=10;        printf("%c%c%c%c%c%c%c%c%c%c%c%c\n",s1[a*3-2],s1[a*3-1],s1[a*3],s1[b*3-2],s1[b*3-1],s1[b*3],s1[c*3-2],s1[c*3-1],s1[c*3],s1[d*3-2],s1[d*3-1],s1[d*3]);        printf("%c%c%c%c%c%c%c%c%c%c%c%c\n",s2[a*3-2],s2[a*3-1],s2[a*3],s2[b*3-2],s2[b*3-1],s2[b*3],s2[c*3-2],s2[c*3-1],s2[c*3],s2[d*3-2],s2[d*3-1],s2[d*3]);        printf("%c%c%c%c%c%c%c%c%c%c%c%c\n",s3[a*3-2],s3[a*3-1],s3[a*3],s3[b*3-2],s3[b*3-1],s3[b*3],s3[c*3-2],s3[c*3-1],s3[c*3],s3[d*3-2],s3[d*3-1],s3[d*3]);    }    return 0;}

    这是最开始写的纯暴力方法,看上去好不协调啊…+_+…

    #include <algorithm>#include <iostream>#include <cstring>#include <cstdlib>#include <cstdio>#include <string>#include <vector>#include <cmath>#include <ctime>#include <queue>#include <stack>#include <set>#include <map>using namespace std;typedef long long LL;const int maxn= 100000 + 10;char  s[3][35]= {"     _  _     _  _  _  _  _  _ ",                 "   | _| _||_||_ |_   ||_||_|| |",                 "   ||_  _|  | _||_|  ||_| _||_|"                };int a[4];int main() {    while(~scanf("%d",&a[0])) {        for(int i=1; i<4; i++)            scanf("%d",&a[i]);        for(int i=0; i<4; i++)            if(!a[i])                a[i]+=10;        for(int i=0; i<3; i++) {            for(int j=0; j<4; j++)            {                int t=a[j];                printf("%c%c%c",s[i][t*3-2],s[i][t*3-1],s[i][t*3]);            }            puts("");        }    }    return 0;}

    O(∩_∩)O哈哈~这样看上去清爽多了吧。

    还有一种比较屌的方法,是照着基神的代码敲的(真不知道基神脑袋怎么长的,就是跟常人思维不一样……好吧…%>_<%…其实不可否认的还是自己太愚笨…Orz),虽然本人目前没看懂,但还是贴上来把,求大神赐教^_^

    #include <algorithm>#include <iostream>#include <cstring>#include <cstdlib>#include <cstdio>#include <string>#include <vector>#include <cmath>#include <ctime>#include <queue>#include <stack>#include <set>#include <map>using namespace std;typedef long long LL;const int maxn= 100000 + 10;char  s[50][50];int data[]={119,36,93,109,46,107,123,37,127,111};int slove(int p,int x){    x=data[x];    if(x>>0&1)s[0][p+1]='_';    if(x>>1&1)s[1][p+0]='|';    if(x>>2&1)s[1][p+2]='|';    if(x>>3&1)s[1][p+1]='_';    if(x>>4&1)s[2][p+0]='|';    if(x>>5&1)s[2][p+2]='|';    if(x>>6&1)s[2][p+1]='_';}int main() {    int a[5];    while(~scanf("%d",&a[0])) {        for(int i=1; i<4; i++)            scanf("%d",&a[i]);        memset(s,' ',sizeof(s));        for(int i=0;i<3;i++)            s[i][12]=0;        for(int i=0;i<4;i++)            slove(i*3,a[i]);        for(int i=0;i<3;i++)            printf("%s\n",s[i]);    }    return 0;}

1 0
原创粉丝点击