【PAT甲 D3】1006 sign in and sign out &1007 maximum subsequence sum C语言

1006 sign in and sign out

很简单的一次遍历搜索

刚开始最后一个没过,想到只是no more than 可能等于15,char数组最后一个需要存放’\0’,因此改为16,成功ac

(看到可以时间转换为秒再进行比较,确实简单许多

#include<stdio.h>
#include<string.h>
int main() {
    int num;
    scanf("%d",&num);
    char name[16];
    int hour,minute,second;
    int ansh=24,ansm=24,anss=24;
    int maxh=0,maxm=0,maxs=0;
    char lock[16],unlock[16];
    for(int i = 0;i < num;i++) {
        scanf("%s",name);
        scanf("%d:%d:%d",&hour,&minute,&second);
        if(hour < ansh){
            ansh = hour;
            strcpy(unlock, name);
        }
        else if(hour == ansh && minute < ansm) {
            ansm = minute;
            strcpy(unlock, name);
        }
        else if(hour == ansh && minute == ansm && second < anss) {
            anss = second;
            strcpy(unlock, name);
        }
        scanf("%d:%d:%d",&hour,&minute,&second);
        if(hour > maxh){
            maxh = hour;
            strcpy(lock, name);
        }
        else if(hour == maxh && minute > maxm) {
            maxm = minute;
            strcpy(lock, name);
        }
        else if(hour == maxh && minute == maxm && second > maxs) {
            maxs = second;
            strcpy(lock, name);
        }
    }
    printf("%s %s\n",unlock,lock);
}

1007 maximum subsequence sum

典型的动态规划

但是刚开始没考虑到最大子序列和为0的情况,导致测试点5一直无法通过。

因为刚开始ans置0,如果都没有大于它的,那么元素下标不会改变,因此输出还是第一个元素以及最后一个元素。

在这里插入图片描述

所以还是需要刚开始将ans置为负数,但是这时如果都是负数,那么ans不会更新,因此后面还需要增加一个判断其是否小于0的条件

#include<stdio.h>
#include<stdlib.h>
int main() {
    int k;
    scanf("%d",&k);
    int *seq;
    seq = (int *)malloc(sizeof(int)*k);
    int ans = -1;
    int sum = 0;
    int m = 0,n = k-1;
    int temp = 0;
    for(int i = 0; i < k; i++) {
        scanf("%d",&seq[i]);
        sum += seq[i];
        if(sum > ans) {
            ans = sum;
            n = i;
            m = temp;
        }
        else if(sum < 0) {
           sum = 0;
           temp = i + 1;
        }
    }
    if(ans < 0) {
        ans = 0;
    }
    printf("%d %d %d\n",ans,seq[m],seq[n]);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值