//自己没想出来,抄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; }