2022级HAUT新生周赛(一)题解

A

简单的输出

注意输出 " 和 \ 需要在前面加 \

#include <stdio.h>
int main()
{
    printf("\"I really love haut!\\n\";");
    return 0;
}

B 工作罢了

只需要找到数学成绩最高并且输入最早的,并且再计算四项平均成绩即可

#include <stdio.h>

int main()
{
    int n;
    scanf("%d", &n);
    double ch, ma, en, sc;
    double s_ch = 0, s_ma = 0, s_en = 0, s_sc = 0;
    int max_sum = 0, max_math = 0;
    for (int i = 0; i < n; i++)
    {
        scanf("%lf%lf%lf%lf", &ch, &ma, &en, &sc);
        if (ma > max_math)
        {
            max_math = ma;
            max_sum = ch + ma + en + sc;
        }
        s_ch += ch, s_ma += ma, s_en += en, s_sc += sc;
    }
    printf("%d\n", max_sum);
    printf("%.2f %.2f %.2f %.2f", s_ch / n, s_ma / n, s_en / n, s_sc / n);
    return 0;
}

C 挑选礼物,但是收礼人

简单的模拟,用数组(也可以不用)记录初始位置,然后根据输入交换就行

#include <stdio.h>

int main()
{
    int n, p;
    scanf("%d%d", &n, &p);
    int a[4];
    scanf("%d%d%d", &a[1], &a[2], &a[3]);
    for (int i = 0; i < n; i++)
    {
        int b1, b2;
        scanf("%d%d", &b1, &b2);

        int k = a[b1];
        a[b1] = a[b2];
        a[b2] = k;
    }

    for (int i = 1; i <= 3; i++)
    {
        if (a[i] == p)
        {
            printf("%d", i);
        }
    }

    return 0;
}

D 表白

输入字符串然后直接循环加和即可

#include <stdio.h>

int main()
{
    int n = 0;
    char str[100010];

    scanf("%s", str);

    for (int i = 0; str[i] != '\0'; i++)
    {
        n += str[i];
    }

    printf("%d", n);

    return 0;
}

/*#include <stdio.h>

int main()
{
    int n = 0;
    char str[100010];

    int i = 0;
    while (scanf("%c", &str[i]) != EOF)
    {
        n += str[i];
        i++;
    }

    printf("%d", n);

    return 0;
}*/

E 约会?干饭!

简单的博弈论

因为每人每次只能取一个石子,只需要知道石子总数的奇偶性,奇数卷卷赢,偶数聚聚赢

另外注意输出复制粘贴,一个中文叹号一个英文叹号

#include <stdio.h>

int n, x, sum;

int main()
{
    scanf("%d", &n);
    for (int i = 1; i <= n; i++)
    {
        scanf("%d", &x);
        sum += x;
        sum %= 10; // 奇偶性只需要判断个位
    }
    if (sum % 2 != 0)
        puts("火锅!");
    else
        puts("牛排!");
    return 0;
}

F 免费餐食 ^o^y

记录最大连续次数的数字和次数即可

#include <stdio.h>

int main()
{
    int n,a[1010];
    scanf("%d", &n);
    int ans_num = 0, ans_sum = 0, mid_sum = 1;  //mid_sum作为标志记录数字出现连续的次数
    for (int i = 0; i < n; i++)
    {
        scanf("%d", &a[i]);
        if(a[i] == a[i-1])  //判断是否和上个数字一样,即是否连续
        {
            mid_sum++;
            if(mid_sum >= 2)
            {
                if(mid_sum == ans_sum)  //连续次数一样判断数字大小,要数字大的
                {
                    if(a[i] > ans_num)
                        ans_num = a[i];
                }
                else if(mid_sum > ans_sum)  //连续次数不一样直接更改
                {
                    ans_num = a[i];
                    ans_sum = mid_sum;
                }
            }
        }
        else
            mid_sum = 1;    //如果和上个数字不一样,即不连续,就重置mid_sum
    }

    printf("%d %d", ans_num, ans_sum);

    return 0;
}

G 好数

判断前后两位递增递减并记录次数,最后递增次数除以递增递减总和即可

也可以用字符判断,更简单了(

#include <stdio.h>

int main()
{
    long long n;
    scanf("%lld", &n);

    long long x = n % 10;
    n /= 10;

    int num_increase = 0, num_decrease = 0, sum = 0;

    while (n > 0)
    {
        int y = n % 10;
        if (x != y)
        {
            sum++;
            if (x > y)
                num_increase++;
            else
                num_decrease++;
        }
        x = y;
        n /= 10;
    }

    double ans = (double)num_increase / (double)sum;
    
    if (ans > 0.7)
        printf("YES ^_^");
    else
        printf("no!!! X_X");

    return 0;
}

H lycoris

括号配对符合基本语法,即对于相同括号,前括号在前,后括号在后就算匹配成功

(同种括号)记录非匹配括号数量和匹配括号数量,出现前括号非匹配次数++,出现后括号非匹配次数--并且匹配次数++,如果非匹配数量为0,则出现后括号不做变动

#include <stdio.h>

int main()
{
    char str[10010];
    scanf("%s", str);

    int s = 0, m = 0, l = 0;
    int ss = 0, mm = 0, ll = 0;

    for (int i = 0; str[i] != '\0'; i++)
    {
        if (str[i] == '(')
            s++;
        else if (str[i] == '[')
            m++;
        else if (str[i] == '{')
            l++;
        else if (str[i] == ')')
        {
            if (s != 0)
            {
                s--;
                ss++;
            }
        }
        else if (str[i] == ']')
        {
            if (m != 0)
            {
                m--;
                mm++;
            }
        }
        else if (str[i] == '}')
        {
            if (l != 0)
            {
                l--;
                ll++;
            }
        }
    }

    printf("%d %d %d", mm, ss, ll);
    return 0;
}

全部评论
%%%
点赞 回复 分享
发布于 2022-11-01 22:08 北京
%%%
点赞 回复 分享
发布于 2022-11-01 22:21 河南
点赞 回复 分享
发布于 2022-11-01 22:22 河南
%%%
点赞 回复 分享
发布于 2022-11-01 22:27 河南
点赞 回复 分享
发布于 2022-11-01 23:29 河南
睿智
点赞 回复 分享
发布于 2023-10-26 17:05 河南

相关推荐

评论
10
4
分享

创作者周榜

更多
牛客网
牛客企业服务