从同学处翻看《程序员》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;
}
8万+

被折叠的 条评论
为什么被折叠?



