1 条题解
-
0
关键信息
- 输入格式:时间以
HH:MM:SS
形式给出,其中:- 小时
HH
范围:00-23(24小时制) - 分钟
MM
和秒SS
范围:00-59
- 小时
- 输出要求:
- 垂直格式:按“小时→分钟→秒”顺序,将每个时间分量转换为6位二进制,直接拼接成18位字符串。
- 水平格式:按“位位置”顺序,依次取小时、分钟、秒的同一位(如第0位、第1位等),每个位置拼接3位(小时+分钟+秒),最终形成18位字符串。
解题思路
1. 时间分量拆分与二进制转换
- 拆分时间:将输入的
HH:MM:SS
拆分为小时、分钟、秒三个整数。 - 转换为6位二进制:每个分量需转换为固定6位二进制字符串,不足6位时在左侧补零。例如:
- 小时
10
(十进制)→ 二进制1010
→ 补零为001010
- 分钟
37
→ 二进制100101
(正好6位)
- 小时
2. 垂直格式生成
直接按“小时二进制→分钟二进制→秒二进制”的顺序拼接,得到18位字符串。例如:
- 小时
10
(001010)、分钟37
(100101)、秒49
(110001)→ 垂直格式为001010100101110001
。
3. 水平格式生成
按位位置(0到5)依次处理:
- 对于每个位置
i
(0≤i≤5),分别取小时、分钟、秒的二进制字符串的第i
位,拼接成3位字符串。 - 将6个位置的结果依次拼接,得到18位字符串。例如:
- 小时
10
(001010)、分钟37
(100101)、秒49
(110001)的第0位分别为0
、1
、1
,拼接为011
; - 第1位分别为
0
、0
、0
,拼接为000
; - 依此类推,最终得到水平格式
001010100101110001
。
- 小时
#include<stdio.h> int main(){ int n,ca,i,j,hour,min,sec,a[6][3]; char c[10]; scanf("%d",&n); for(ca=1; ca<=n; ca++){ scanf("%s",c); hour = (c[0]-'0')*10 + c[1] - '0'; min = (c[3]-'0')*10 + c[4] - '0'; sec = (c[6]-'0')*10 + c[7] - '0'; for(i=32,j=0; i; i>>=1,j++){ a[j][0] = hour&i ? 1 : 0; a[j][1] = min&i ? 1 : 0; a[j][2] = sec&i ? 1 : 0; } printf("%d ",ca); for(i=0;i<6;i++){ for(j=0;j<3;j++){ printf("%d",a[i][j]); } } printf(" "); for(j=0;j<3;j++){ for(i=0;i<6;i++){ printf("%d",a[i][j]); } } printf("\n"); } }
- 输入格式:时间以
- 1
信息
- ID
- 2789
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者