欢乐赛#41全题解
2025-02-16 22:00:13
发布于:上海
欢乐赛#41全题解
T1:
题目分析
本题要求输入一个浮点数,输出它的整数部分
解题思路
由于c++的int类型有自动向下取整的功能,我们可以将输入数据存入一个int变量中,再输出即可
AC代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a;
cin>>a;
cout<<a;
return 0;
}
T2:
题目分析
本题要求输入三个整数,输出其中最大值-最小值的结果
解题思路
直接使用 max 和 min 函数取最大和最小值即可,需要注意c++的 max 与 min 函数只能取两个数的最大值,所以需要使用两个max 和两个 min才能取到最大与最小值
AC代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a,b,c;
cin>>a>>a>>c;
cout<<max(max(a,b),c)-min(min(a,b),c);
return 0;
}
T3:
题目分析
本题要求输出一个矩阵中m的倍数的个数
解题思路
两层暴力for循环即可解决,肥肠简单
AC代码
#include<bits/stdc++.h>
using namespace std;
int n,m,t,ans=0;
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
cin>>t;
if(t%m==0)ans++;
}
}
cout<<ans;
return 0;
}
T4:
题目分析
本题要求对一个长度为n的数组a进行m次冒泡(排序)后输出
解题思路
我怕在座的各位还有人没学过冒泡排序,所以讲一下冒泡排序的规则。
冒泡排序的原理就是每次比较相邻元素,如果大的在前面,就用swap函数交换(你去搞个tmp也可以)具体动图看这里 冒泡排序动图
AC代码
#include<bits/stdc++.h>
using namespace std;
int n,m,a[1010];
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=1;i<=m;i++)
{
for(int j=1;j<n;j++)
{
if(a[j]>a[j+1])swap(a[j],a[j+1]);
}
}
for(int i=1;i<=n;i++)cout<<a[i]<<" ";
return 0;
}
T5:
个人认为这是此次欢乐赛最难的题,谁能告诉我为什么这么多人错T6?
题目分析
本题有t组测试数据,每组给了我们两个整数 a 和 b ,a只能*2 或 +1,每让a *2或+1都算作一次操作,问让a=b至少需要几次操作
解题思路
这道题有一点很重要就是逆向思考更好,把a让 *2或+1 变成让b /2或-1,因为逆着更容易判断终点
我这里只讲逆向思维。
因为我们要大数变小数,而+1反而变大了,这样看最优解就是一直除以二了,但你会发现一个问题:如果b无法整除二了,那该怎么办呢?就只能+1了,因为奇数+1一定是偶数,所以当除不尽时就得+1。
所以我们代码的思路就是如果b<=a就一直加,否则如果b能整除二就除以二,没法整除二就+1即可
AC代码
#include<bits/stdc++.h>
using namespace std;
int ans;
int main()
{
int T;
cin>>T;
while(T--)
{
ans=0;
int a,b;
cin>>a>>b;
while(a<b)
{
if(b%2==0)
{
b/=2;
ans++;
}
else
{
b++;
ans++;
}
}
ans+=abs(a-b);
cout<<ans<<endl;
}
return 0;
}
T6:
题目分析
本题给了我们t组测试数据,每组有a和b两个数,代表有a个菜鸟和b个高手,其中两个高手和一个菜鸟或两个菜鸟和一个高手可组成一队,问最多能组成多少队
解题思路
如果高手比菜鸟多,最优解显然是采用两个高手配一个菜鸟的方案;如果菜鸟比高手多,最优解就是采用两个菜鸟配一个高手的方案,如果相同的话就随意了。我们可以用一个while循环来实现这个思路,如果无法再组队的话,就得退出while循环了。
AC代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int T;
cin>>T;
while(T--)
{
int a,b,ans=0;
cin>>a>>b;
while(a>0 && b>0 && (a+b)>=3)
{
if(a>=b)
{
ans++;
a-=2;
b--;
}
else
{
ans++;
a--;
b-=2;
}
}
cout<<ans<<endl;
}
return 0;
}
蒟蒻第一次发欢乐赛题解,点个赞吧球球了
全部评论 17
因为极简计算器
2025-02-17 来自 广东
3d
2025-02-17 来自 上海
1d
2025-02-17 来自 上海
1d
2025-02-17 来自 上海
1d
2025-02-17 来自 上海
1d
2025-02-17 来自 上海
1d
2025-02-17 来自 上海
1d
2025-02-17 来自 上海
1最后一题容易啊,枚举就行了
2025-03-08 来自 广东
0d
2025-02-17 来自 上海
0d
2025-02-17 来自 上海
0d
2025-02-17 来自 上海
0d
2025-02-17 来自 上海
0d
2025-02-17 来自 上海
0d
2025-02-17 来自 上海
0d
2025-02-17 来自 上海
0d
2025-02-17 来自 上海
0
有帮助,赞一个