NBUOJ 1844 C(模拟)
题目描述 写一个程序把一个用 hour:minute 表示的美国时间转换成美式英语表示的时间(按下面的格式)。
这里是转换的规则:( 注意他们可能不同于你习惯的英国规则)
第一个字符以大写字母写输出
复合的英文数目是带有连字符号的,举例来说:
forty-four
用[x_in_english] o’clock 来表示 x:00
用Quarter past [x_in_english] 来表示 x:15
用[x_in_english] thirty 来表示 x:30
用Quarter to [next_hour_in_english] 来表示 x:45
以别的方式来表示其它x:nn
[x_in_english] [nn_in_english] 当 nn<45
[60-nn_in_english] to [next_hour_in_english] 当 nn>45
Examples:
5:00 Five o’clock
10:10 Ten ten
9:22 Nine twenty-two
5:15 Quarter past five
2:30 Two thirty
6:40 Six forty
5:45 Quarter to six
8:47 Thirteen to nine
12:47 Thirteen to one (American time: 1:00 follows 12:00)
输入要求 单独的一行包括一个以hour:minutes表示的时间。
每一个hour属于[1…12],minutes总是成表示成两位在[0…59]的范围里。
输出要求 单独的一行包括一个被表示成英文的时间。
输入样例 5:45
输出样例 Quarter to six
知识点 时间转换模拟
关键点 细读题目,分析总结出题目所有需求
易错点 【NBUOJ 1844 C(模拟)】1.只有每行的第一个单词的第一个单词才需要大写,其余均小写
2.12点的下一个时刻是1点
3.分钟数大于45时,时刻在原来的基础上+1,采用几点差几分的表示法,如8:53,表示为seven to nine(九点差七分)。
源码
#include
#include
#include
#include
using namespace std;
int main()
{
char h[21][10]={//从1到19的英文数字(首字母大写)
"","One","Two","Three","Four","Five","Six","Seven","Eight","Nine","Ten","Eleven","Twelve","Thirteen","Fourteen","Fifteen","Seventeen","Eighteen","Nineteen"
};
char h4[21][10]=//从1到19的英文数字(首字母小写)
{
"","one","two","three","four","five","six","seven","eight","nine","ten","eleven","twelve","thirteen","fourteen","fifteen","seventeen","eighteen","nineteen"
};
char h2[7][10]={//10,20,30,40,50的英文数字(首字母小写)
"","ten","twenty","thirty","forty","fifty"
};
char h3[7][10]={//10,20,30,40,50的英文数字(首字母大写)
"","Ten","Twenty","Thirty","Forty","Fifty"
};
int hour,minute,tp1,tp2;
while(scanf("%d:%d",&hour,&minute)!=EOF)
{
if(minute == 0) printf("%s o'clock\n",h[hour]);
//先处理几种特殊情况,下同
else if(minute == 30) printf("%s thirty\n",h[hour]);
else if(minute == 15) printf("Quarter past %s\n",h4[hour]);
else if(minute == 45) {if(hour==12) hour=0;
printf("Quarter to %s\n",h4[hour+1]);
}
else if(minute<45)//小于45的普遍情况
{
tp1=minute%10;
tp2=minute/10;
if(tp1==0) printf("%s %s\n",h[hour],h2[tp2]);
else if(tp2<=1) printf("%s %s\n",h[hour],h4[minute]);
else if(tp2>1) printf("%s %s-%s\n",h[hour],h2[tp2],h4[tp1]);
}
else if(minute>45) //大于45的普遍情况
{
tp1=minute%10;
tp2=minute/10;
if(hour==12) hour=0;
printf("%s to %s\n",h[60-minute],h4[hour+1]);
}
}
return 0;
}
推荐阅读
- 三门问题(蒙提霍尔悖论)分析与Golang模拟
- 投石机可连续抛射石头【Algodoo|投石机可连续抛射石头【Algodoo | 物理模拟】
- spring5源码系列--循环依赖|spring5源码系列--循环依赖 之 手写代码模拟spring循环依赖
- Code|Code Forces-681C(模拟题,优先队列,设计STL)
- jQuery之模拟实现$().animate()(上)
- 一个简单的TCP模拟实现(一)
- Injection|Injection For Xcode11 macOS 10.15 Catalina 亲测可用iOS模拟器UI界面调试实时刷新工具
- 康佳电视进入无线调试
- 【css灵感】模拟3D地球
- Python|Python socket 编程子模拟 HTTP GET 请求和响应