- 题解
9.26快乐星期一题解
- 2022-9-27 8:55:56 @
A.歪比歪比
主要考察输入输出和循环,注意cin,cout,endl的使用,当输入输出数据较大时,scanf和printf会比cin,cout快很多。
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
while(n--)
{
printf("歪比歪比\n");
}
}
B.肥鲶鱼的餐厅
题目描述
肥鲶鱼餐厅的特点是点菜的程序。对于每一位来访者,肥鲶鱼都会自己选择一套这个来访者要接受的菜肴。在点菜时,肥鲶鱼遵循以下规则。
- 每个客人至少应该得到一道菜(红烧鲶鱼、鲶鱼汤、鲶鱼炒大米都被认为是菜)。
- 每位游客应得到不超过一份红烧鲶鱼、不超过一份鲶鱼汤和不超过一份鲶鱼炒大米。
- 所有游客应得到不同的菜品组合。
肥鲶鱼最多可以让多少人吃饱?
解释
我们会发现这三种菜的排列组合最多为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 comments
-
___ LV 10 @ 2022-9-27 18:35:23
好耶!是题解诶!!!
-
2022-9-27 9:13:25@
好耶!是题解诶!!!
-
2022-9-27 9:04:48@
好耶!是题解诶!!!
- 1