|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
目的:
确定警报之间的最大时间间隔。 每个警报会在相应的分钟开始时开始响起,并精确地响一分钟。 数组中的时间不是按时间顺序排列的。
例子:
[“ 23:00”,“ 04:22”,“ 18:05”,“ 06:24”])==“ 11:40”。 警报不会响起的最大间隔为11小时40分钟。
[“ 14:51”])=“ 23:59”。 如果警报现在响起,则它将在23小时59分钟后不会响起。
**arr是接收数组
我的思路是:
1 先按行排序时间,
2 在依次后面时间(换成分钟)减去前面时间(换成分钟)-1,
3 max_min保存最大的间隔
4 通过sprintf(result1, "%02d:%02d", max_min/60,max_min%60);将时间间隔按指定格式写到result指针所指的地方
5 返回result指针;
我估计是4或者第5步有问题,但我实在改不出来具体哪里有问题了
- #include <stdlib.h>
- #include <string.h>
- #include <stdio.h>
- char* solve(char **arr, size_t arr_length)
- {
- int c;
- char *p;
- char result1[]="23:59";
- char *result=result1;
- int min=0,max_min=0;
- if(arr_length>1)
- {
- for(size_t i=0;i<arr_length-1;i++)
- {
- for(size_t j=0;j<arr_length-i-1;j++)
- {
- if((c=strcmp(*(arr+j),*(arr+j+1)))>0)
- {
- p=*(arr+j);
- *(arr+j)=*(arr+j+1); //将传过来的时间按行排序
- *(arr+j+1)=p;
- }
- }
- }
- for(size_t m=0,n=0;m<arr_length-1;m++)
- {
- min=((arr[m+1][n]-'0')*10+(arr[m+1][n+1]-'0'))*60 + (arr[m+1][n+3]-'0')*10+(arr[m+1][n+4]-'0') -( ((arr[m][n]-'0')*10+(arr[m][n+1]-'0'))*60+(arr[m][n+3]-'0')*10+(arr[m][n+4]-'0'))-1;
- if(min>max_min)
- {
- max_min=min;
-
- }
- }
- sprintf(result1, "%02d:%02d", max_min/60,max_min%60);
- return result;
- }
- else
- return result;
- }
复制代码
本帖最后由 superbe 于 2019-10-17 20:50 编辑
solve函数中result[]是一个局部变量,虽然返回了它的地址,但是它的内容在函数结束后发生了变化。
在main里,根据返回的result地址不能得到正确内容(变化以前的字符串)。可以使用字符数组接收solve的结果。
- #include <stdlib.h>
- #include <string.h>
- #include <stdio.h>
- void solve(char **arr, size_t arr_length, char result[])
- {
- int c;
- char *p;
- strcpy(result,"23:59");
- int min=0,max_min=0;
- if(arr_length>1)
- {
- for(size_t i=0;i<arr_length-1;i++)
- {
- for(size_t j=0;j<arr_length-i-1;j++)
- {
- if((c=strcmp(*(arr+j),*(arr+j+1)))>0)
- {
- p=*(arr+j);
- *(arr+j)=*(arr+j+1); //将传过来的时间按行排序
- *(arr+j+1)=p;
- }
- }
- }
- for(size_t m=0,n=0;m<arr_length-1;m++)
- {
- min=((arr[m+1][n]-'0')*10+(arr[m+1][n+1]-'0'))*60 + (arr[m+1][n+3]-'0')*10+(arr[m+1][n+4]-'0') -( ((arr[m][n]-'0')*10+(arr[m][n+1]-'0'))*60+(arr[m][n+3]-'0')*10+(arr[m][n+4]-'0'))-1;
- if(min>max_min)
- {
- max_min=min;
- }
- }
- sprintf(result, "%02d:%02d", max_min/60,max_min%60);
- }
- }
- int main()
- {
- char *arr[] = {"23:00", "04:22", "18:05", "06:24"};
- char result[6];
- solve(&arr[0], sizeof(arr)/sizeof(arr[0]), result);
- printf("最大时间间隔: %s\n", result);
- return 0;
- }
复制代码
|
|