题解 | #ranko的手表#

ranko的手表

https://www.nowcoder.com/practice/37275e85ae7c4453920eae6b9f7f45fc

//自己没想出来,抄c排名第一个的
//方法:0 - 23*60+59,去试试符合 条件第一次手表格式否, 和第二次条件
//之前卡在先确定hour第一位,再比对第二位,再比对第三位上,因为情况太多(其实也可以实现),直接放弃。
//符合就进入候选数组
//遍历比对得到相差最小值,最大值

#include <stdio.h>
#include<malloc.h>

int main() {
    char time1[6];
    for (int i = 0; i < 5; i++) {
        scanf("%c", &time1[i]);
    }
    char time2[6];
 scanf("%s",&time2[0]);



// 枚举法
    int biggest_time = 23 * 60 + 59;
// 存储可能值
    int* time1Possib = (int*)malloc(sizeof(int) * biggest_time);
    int len1 = 0;
    int* time2Possib = (int*)malloc(sizeof(int) * biggest_time);;
    int len2 = 0;
    for (int i = 0; i <= biggest_time; i++) {
        int hour = i / 60;
        int minu = i % 60;
        if ((hour / 10 == time1[0] - '0' || time1[0] == '?') &&
                (hour % 10 == time1[1] - '0' || time1[1] == '?') && ( minu / 10 == time1[3]  - '0'||
                        time1[3] == '?') && (minu % 10 == time1[4] - '0' || time1[4] == '?')) {
            time1Possib[len1++] = i;

        }

        if ((hour / 10 == time2[0] - '0' || time2[0] == '?') &&
                (hour % 10 == time2[1] - '0' || time2[1] == '?') && ( minu / 10 == time2[3]  - '0'||
                        time2[3] == '?') && (minu % 10 == time2[4]  - '0'|| time2[4] == '?')) {
            time2Possib[len2++] = i;

        }
    }
    int max = 0;
    int min = biggest_time;

for(int i = 0;i<len1;i++){
    for(int j =0;j<len2;j++){
        if(time1Possib[i]<time2Possib[j]){
            min = time2Possib[j]-time1Possib[i]<min?time2Possib[j]-time1Possib[i]:min;
            max = time2Possib[j]-time1Possib[i]>max?time2Possib[j]-time1Possib[i]:max;
        }
    }
}

printf("%d %d",min, max);


    return 0;
}

全部评论

相关推荐

tttk_:就是人多。 有的是条件和你差不多然后没在od待过的人。 所以就拿这个筛你了。 就和卡学历一样,人太多了。 从公司角度,这样做节省精力,更方便。 没办法谁叫现在人多呢
第一份工作能做外包吗?
点赞 评论 收藏
分享
07-20 12:08
已编辑
江南大学 图像识别
机械牛马勇闯秋招:把校园经历里面做过的项目,大作业,课设,毕设啥的,扩写,写成具体的项目经历,自我评价缩写别占篇幅,不然这简历真没东西,初筛都过不了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务