算法擂台代码:时间表达
来源:互联网 发布:网络有利有弊 英语翻译 编辑:程序博客网 时间: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;
}
#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;
}
- 算法擂台代码:时间表达
- 程序员杂志07年12月算法擂台时间表达的解答
- 9期算法擂台源代码
- 程序员12期算法擂台
- 12期算法擂台解答
- 0801算法擂台题目解答
- 算法擂台微积分习题问题解答
- 算法时间复杂度的表达-渐进符号与主定理
- 《程序员》算法擂台之骑士聚会问题
- 2008年06期算法擂台解答
- 时间常用的表达
- 英语时间表达方法
- 时间正则表达
- 《程序员》算法擂台之八皇后问题-递归算法举例
- 代码不过是表达
- 《程序员》算法擂台之登山计划问题详解
- 英语的时间表达法
- 决策树算法的可视化表达
- MFC技术内幕系列之(一)---MFC应用程序“生死因果”内幕
- UNIX系统编程笔记
- MFC技术内幕系列之(二)---MFC文档视图结构内幕
- MFC技术内幕系列之(三)----MFC执行期类型识别与动态创建技术内幕
- ado.net获取存储过程的返回值
- 算法擂台代码:时间表达
- PB开发者的好工具-PB源代码比较器
- MFC技术内幕系列之(四)---MFC消息映射与消息传递内幕
- 为GridView的删除行添加删除确认
- 一种可以穿透还原卡和还原软件的代码
- MFC技术内幕系列之(五)---MFC文档序列化内幕
- 孙卫琴Hibernate第四章对象-关系映射基础
- LINQ初探
- linux下安装mplayer