A.歪比歪比

主要考察输入输出和循环,注意cin,cout,endl的使用,当输入输出数据较大时,scanf和printf会比cin,cout快很多。

#include<stdio.h>
int main()
{
    int n;
    scanf("%d",&n);
    while(n--)
    {
        printf("歪比歪比\n");
    }
}

B.肥鲶鱼的餐厅

题目描述

肥鲶鱼餐厅的特点是点菜的程序。对于每一位来访者,肥鲶鱼都会自己选择一套这个来访者要接受的菜肴。在点菜时,肥鲶鱼遵循以下规则。

  • 每个客人至少应该得到一道菜(红烧鲶鱼、鲶鱼汤、鲶鱼炒大米都被认为是菜)。
  • 每位游客应得到不超过一份红烧鲶鱼、不超过一份鲶鱼汤和不超过一份鲶鱼炒大米。
  • 所有游客应得到不同的菜品组合。

肥鲶鱼最多可以让多少人吃饱?

解释

我们会发现这三种菜的排列组合最多为7

分别是

  1. 红烧鲶鱼
  2. 鲶鱼汤
  3. 鲶鱼炒大米
  4. 红烧鲶鱼,鲶鱼汤
  5. 红烧鲶鱼,鲶鱼炒大米
  6. 鲶鱼汤,鲶鱼炒大米
  7. 红烧鲶鱼,鲶鱼汤,鲶鱼炒大米

所以说我们最多的情况下也只能满足7个客人,然后这个时候我们再由我们的菜品数量来判断最多可以喂饱几个人。

//自定义函数,或者冒泡排序,从大到小排一下,然后以上7种情况分别讨论就行
#include<stdio.h>
int max(int x,int y)
{
    if(x>y)
        return x;
    else
        return y;
}
int min(int x,int y)
{
    if(x<y)
        return x;
    else
        return y;
}
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int a,b,c,maxn,mid,minn;
        int ans=0;
        scanf("%d %d %d",&a,&b,&c);
        int sum=a+b+c;
        maxn=max(a,max(b,c));
        minn=min(a,min(b,c));
        mid=sum-maxn-minn;
        if(maxn>0)
        {
            maxn--;
            ans++;
        }
        if(mid>0)
        {
            mid--;
            ans++;
        }
        if(minn>0)
        {
            minn--;
            ans++;
        }
        if(maxn>0&&mid>0)
        {
            maxn--;
            mid--;
            ans++;
        }
        if(maxn>0&&minn>0)
        {
            maxn--;
            minn--;
            ans++;
        }
        if(mid>0&&minn>0)
        {
            mid--;
            minn--;
            ans++;
        }
        if(minn>0&&maxn>0&&mid>0)
        {
            mid--;
            minn--;
            maxn--;
            ans++;
        }
        printf("%d\n",ans);
    }
}
​

C.前缀和

解释

先预处理对7求余的前缀和,余数只可能是0,1,2,3,4,5,6,然后再开个数组处理这7个数出现的第一次的下标和最后一次的下标,然后找这出每个数的两个下标之间的区间长度最大为多少,就是本题答案。

#include<stdio.h>
int a[100010];
int qzh[100010];//qzh[i]表示前i项的和与7取余的结果
int last[10];
int first[10];
int main()
{
    int n;
    scanf("%d",&n);
    qzh[0]=0;
    int ans=0;
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
        qzh[i]=(qzh[i-1]+a[i])%7;
    }
    for(int i=1;i<=n;i++)//求最后一次出现余数qzh[i]的次数
    {
        last[qzh[i]]=i;
    }
    for(int i=n;i>=0;i--)//求第一次出现余数qzh[i]的次数,这里要到0,因为只有这样才能吧[i,n]也包括在里面。
    {
        first[qzh[i]]=i;
    }
    for(int i=0;i<7;i++)
    {
        if(ans<(last[i]-first[i]))
        {
            ans=last[i]-first[i];
        }
    }
    printf("%d",ans);
}

D.上古时期的宝贝,现在开卖了

纯阅读题,自己将关系好好理理

#include<stdio.h>
int main()
{
    int n,x,y;
    scanf("%d %d %d",&n,&x,&y);
    int sum=n/290;
    if(sum*y>=12)
    {
        printf("YES\n");
        printf("%d",n-(12/y+(12%y!=0))*290);
    }
    else
    {
        printf("NO\n");
        printf("%d %d\n",x*sum,(50*sum+16*x*sum+22*(10-x-y)*sum)/80);
    }
}

E.147爱打印

ikun签到题

F.Charlotte

冒泡模板题,卡了一下long long

#include<stdio.h>
int a[100001];
int main()
{
    int n,x;
    scanf("%d%d",&n,&x);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n-i;j++)
        {
            if(a[j]>a[j+1])
            {
                int temp=a[j];
                a[j]=a[j+1];
                a[j+1]=temp;
            }
        }
    }
    long long ans=0;
    for(int i=1;i<=n-x;i++)
    {
        ans+=a[i];
    }
    printf("%lld",ans);
}

G.是A+B哦!

幸运99原题,大模拟,演草纸写写就能出来

H. 数学问题

快速幂,有兴趣的去b站搜视频学学,后期会讲

3 条评论

  • @ 2022-9-27 18:35:23

    好耶!是题解诶!!!

    • @ 2022-9-27 9:13:25

      好耶!是题解诶!!!

      • @ 2022-9-27 9:04:48

        好耶!是题解诶!!!

        • 1