算法擂台代码:时间表达

来源:互联网 发布:网络有利有弊 英语翻译 编辑:程序博客网 时间:2024/05/16 04:33

从同学处翻看《程序员》2007年12月刊,有个算法擂台比较有意思,试了着写了个代码。一看要求"解答提交时间,最好能早于当月15日",今天已20。加上懒得注释。就贴上来了,好久没写文章了也是。

题目的要求:输入数字,输出相应的英文时间表达语句,当输入为0,0时结束退出


样例输入:
8 21
12 45
5 0
0 30
0 0
样例输出:
it is twenty-one pass eight.
it is a quarter to thirteen.
it is five o' clock.
it is half pass zero.

比较有意思,写了个代码试了试,结果如下:

1 0
2 30
3 15
4 45
5 12
6 53
0 15
0 23
0 56
12 48
12 0
0 0
it is one o' clock
it is half pass two
it is a quarter pass three
it is a quarter to five
it is twelve pass five
it is seven to seven
it is a quarter pass zero
it is twenty-three pass zero
it is four to one
it is twelve to thirteen
it is twelve o' clock

貌似符合要求,就贴上来了,算法很烂,可以说没有算法,就简单的逻辑,也没有注释,凑合着看吧,应该不难懂。

 

#include <stdio.h> 
#include 
<string.h>
#include 
<stdlib.h>

int initargs(int,int);

#define HALF "half"
#define QUARTER    "a quarter"
#define NORMAL    0
#define PASS    1
#define TO        2

#define BUF    100

static int flag=0;

static char* hours[]={"zero","one","two","three","four","five","six","seven","eight","nine","ten","eleven","twelve","thirteen"};
static char* minis[]={"","one","two","three","four","five","six","seven","eight","nine",
              
"ten","eleven","twelve","thirtenn","fourteen","a quarter","sixteen","seventeen","eighteen","nineteen",
              
"twenty","twenty-one","twenty-two","twenty-three","twenty-four","twenty-five","twenty-six","twenty-seven","twenty-eight","twenty-nine"}
;
static char* hour;
static char* mini;
static char* mode;

static char* time;

struct stime{
int hour;
int mini;
}
;

struct stime times[BUF];

int main() 

    
int count,i;
    
int hr,mi;
    
for(count=0;count<BUF;count++)
    
{    
        scanf(
"%d%d",&hr,&mi);
        
if((hr|mi)==0)
            
break;
        
if(hr<0 || hr>12 || mi<0 || mi>60)
        
{
            printf(
"no match ");
            
return 0;
        }

        times[count].hour 
= hr;
        times[count].mini 
= mi;
    }

    
    time 
= (char*)malloc(100 );
    
    
for(i=0; i<count; i++)
    
{        
        memset(time,
0,sizeof time);
        initargs(times[i].hour,times[i].mini);
        
if(NORMAL == flag)
            sprintf(time, 
"it is %s o' clock",hour);
        
if(PASS == flag)
            sprintf(time, 
"it is %s pass %s",mini,hour);
        
if(TO == flag)
            sprintf(time, 
"it is %s to %s", mini, hour);

        printf(
"%s ",time);
    }

    
return 0;
}
 

int initargs(int hr,int mi)
{
    
//int ret;
    switch(mi) {
    
case 0:
        flag 
= NORMAL;
        hour 
= hours[hr];    
        
return 0;
    
case 15:
        flag 
= PASS;
        mini 
= QUARTER;
        hour 
= hours[hr];
        
return 0;
    
case 30:
        flag 
= PASS;
        mini 
= HALF;
        hour 
= hours[hr];
        
return 0;
    
case 45:
        flag 
= TO;
        mini 
= QUARTER;
        hour 
= hours[hr+1];
        
return 0;
    
default:
        
break;
    }


    
if(mi>0 && mi<30)
    
{
        mini 
= minis[mi];
        hour 
= hours[hr];
        flag 
= PASS;
    }

    
else if(mi>=30 && mi<60)
    
{
        mini 
= minis[60-mi];
        hour 
= hours[hr+1];
        flag 
= TO;
    }

    
else
        printf(
"some error ");

    
return 0;
}

原创粉丝点击