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
- 上传者