每日一练:吃!吃!吃!(学习随笔)

题目名称:吃!吃!吃!时间限制:1000ms内存限制:256M

题目描述

已知n个整数。 每3个数算一个周期。 不足一个周期补0. 在周期的第一个位置的数的权值和等于a1+a[1+3]+… … 求三个数的最大权值。 如果最大权值为第一个数,输出’J’; 最大权值为第二个数,输出’H’; 最大权值为第三个数,输出’B’。

输入描述:

第一行输入一个整数n。(1<=n<=100) 第二行输入n个整数。

输出描述:

输出答案。

示例 

输入

4
1 1 1 1

输出

J

这一题并不困难,重在理解权的概念

这里的权其实就是数组纵向相加(每三个输一行)

例如                                

1 1 1                             第一个权为第一列相加即1+2+1=4

2 1 3                             第二个权为1+1=2

1                                   第三个为1+3=4                              

显然第一个和第三个权相等且大于第二个所以输出J(认为第一个最大)

在,不更改原有代码的情况下,只要写出纵向相加的代码就可以了

完整代码(并不是最优解)


#include <stdio.h>
#include <stdlib.h>
void solution(int n, int arr[])
{
    int q, q1, q3;
    q = q1 = q3 = 0;//定义三个权,应为不为3的倍数要补0,所以权设为0,满足例如只有两个数的情况
    if (n >= 3)//纵向相加求三个权值
    {
        for (int i = 0; i < n; i += 3)
            q += arr[i];
        for (int i = 1; i < n; i += 3)
            q1 += arr[i];
        for (int i = 2; i < n; i += 3)
            q3 += arr[i];

        if (q1 > q && q1 > q3)//接下来求最大权
        {
            printf("H");
        }
        else if (q3 > q && q3 > q1)
        {
            printf("B");
        }
        if (q > q1 && q > q3)
            printf("J");
    }
    if(n<3)//小于时
    {
        if (n == 1)
            printf("J");
        if (n == 2)
        {
            q = arr[0];
            q1 = arr[1];
            if (q >= q1)//求权最大权,其实还应该考虑权三,因为前两个权可能为负
                printf("J");
            else
                printf("H");
        }
    }

}
int main() {
    int n;
    scanf("%d", &n);
    int* arr;
    arr = (int*)malloc(n * sizeof(int));
    for (int i = 0; i < n; i++)
    {
        scanf("%d", &arr[i]);
    }
    solution(n, arr);
    return 0;
}

提醒自己也提醒再看的朋友:刷题不要死磕,尽可能最大化利用时间

如果读到的朋友还有更优秀的解法,或者书写不妨分享一下,彼此学习,取长补短嘛,抱拳了老铁!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值