欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 新车 > CSP-J2021 分糖果 题解

CSP-J2021 分糖果 题解

2025/2/19 8:42:55 来源:https://blog.csdn.net/Brilliant_Sky/article/details/145618062  浏览:    关键词:CSP-J2021 分糖果 题解

(一)读懂题目

关键词:n个小朋友,至多只能拿R块糖,至少要拿L块糖
关键句:平均分至少于n块,剩余的糖果均归你所有,这些糖果是你的奖励。

(二)分析算法+时间复杂度和空间复杂度

枚举算法,时间复杂度O(n)

(三)代码实现

(做完本题后,我去看看别的大佬的代码,发现就我代码最长……)
好,加过注释的代码如下:
#include<iostream>
#include<cstdio>
using namespace std;
int n,l,r;//第一步:定义变量。 
int main(){//本程序的输入输出流,我都使用规范输入输出流,以减少时间 scanf("%d%d%d",&n,&l,&r);//第二步:输入变量。 int max=0;//设置一下最终答案max,初值赋为0。//↓以下程序max变量的赋值都使用打擂台的思想 ↓ int m=l%n;//设置个m变量,优先统计若只拿L个,那么此时的答案为多少(由于此变量可能还要进行运算,所以我并没有将max设为l%n) if(r==n||r<n||l<n)//特判一下(以防题目耍诈) {printf("0\n");return 0;//结束程序,否则白处理了 }if(l==r)//如果遇到L=R时,需要特殊处理(情况比较特殊,不能用下面的大众处理化) {for(int i=l;i<=r;i++)//直接枚举,不用管太多 {int t=i%n;if(t==n-1){printf("%d\n",t);//如果余数已经是n-1了(不可能更高了),就不继续往下算,直接结束。 return 0;}if(max<t)//max函数赋值,打擂台 {max=t;}}printf("%d\n",max);//最后输出答案 return 0;//结束程序 }if(m==n-1)//如果余数已经是n-1了(不可能更高了),就不继续往下算,直接结束。{printf("%d\n",m);return 0;}for(int i=1;i+l<=r;i++)//枚举,设置变量i表示以L为最少量,加上的数。 {int t=i+m;//变量t表示此时的奖励(答案) if(t>=n)//如果奖励比人数还多,直接跳过 {continue;}if(max<t)//打擂台,轮换擂主 {max=t;}}printf("%d\n",max);//最后输出擂主,输出答案 return 0;
}

(四)总结反思

说过了,做完之后我看了看别的大佬的代码,都好简便,感觉就我最low……
不过他们的代码思路确实不错,有空也要学一学,简化下自己的代码。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com