开始: 2025-02-10 14:30:00

【2024科创】阶段赛—1(基础)

结束: 2025-02-10 17:20:00
当前: 2025-0404-1919 22:04:21  类型:OI 状态:已经结束 

[GESP202309 一级] 买文具

显而易见的,计算所需总钱数Sum(记得初始化为0),而后:判定当Q>=Sum时能够买起;否则,买不起。
	int Sum=0;
	Sum=2*X+5*Y+3*Z;
	if(Sum>Q){
		cout<<"No\n"<<Sum-Q;
	}else{
		cout<<"Yes\n"<<Q-Sum;
	}

[GESP202303 一级] 每月天数

本题需要通识:每个月的天数,可以通过“数手骨节”记忆;当然,点击Windows操作系统任务栏右侧(屏幕右下角)的时间也可以进行查看。
谨记:编程解决问题时,很多时候都会把复杂问题分解为更简单的子问题,而后逐一解答;如果子问题还无法解答,那么就继续分解为更简单的子问题。直到你现有的水平能够解答所有子问题。随着不断的学习,知识层次、能力水平不断提高,自然可以高屋建瓴,很多问题不再需要划分成子问题,或者能够将复杂的处理逻辑用简练的代码实现。
就本题来说,其中1、3、5、7、8、10、12月为大月,其他月为小月。所以可以划分为两类:大月和小月,此时大月很容易解答,而小月中2月比较特殊,其他月均为30。于是,又将小月划分为两类:2月和其他;此时其他小月容易解答,而2月只需根据闰年进行特判即可。至此,整个问题得解。
程序设计思路的优劣、代码风格的好坏,会决定代码清晰程度、代码中BUG的多少,希望大家在练习过程中时刻注意。
本题主要部分代码如下:
	if (B == 1 || B == 3 || B == 5 || B == 7 || B == 8 || B == 10 || B == 12){
		cout << 31;
	}else{
		if (B != 2) {
			cout<<30;
		}else{
			if (A % 400 == 0 || (A % 4 == 0 && A % 100 != 0)){
				cout << 29;
			}else{
				cout << 28;
			}			
		}
	}

[GESP202406 一级] 立方数

很多同学没有接触过手算开立方,一般来讲可以用逼近法来开立方:假设一个数x是n的立方根,而后计算x*x*x的结果和n进行比较,通过若干次假设和验算,最终能够得到较为精确的结果。通过计算机进行计算也采用这样的步骤。
就本题而言,题目并不是让我们计算n的立方根;而是验证,并且已经给出了验证方法:x*x*x==n就是条件。那么,我们只需要从1到n逐个试探即可,即for(int i=1;i<=n;i++)。
下面给出的代码中,并没有从1循环到n,思考为什么这样可行?
	for(int i=1;i*i*i<=n;i++)
	{
		if(i*i*i==n)
		 {
		 	cout<<"Yes"<<endl;
		 	return 0;
		  } 
	}
	cout<<"No"<<endl;

[GESP202309 一级] 小明的幸运数

按照题意依次验证[L,R]区间内每个数i,是否满足i%k==0或i/k==0,如果满足则把i加到结果里即可。

[GESP202409 一级] 美丽数字

与上一题类似,只不过这次给出的每个数需要我们读取。而后判定所读取的ai这个数字是否满足条件:ai%9==0 && ai%8!=0,如果满足该条件则结果加1即可。

[GESP202312 二级] 小杨做题

对于这个比较复杂的问题,首先解决一部分:计算每天做了多少题?这可以根据题目的递推关系“从第 3 天起,小杨每天做的题目数量是前两天的总和。”使用循环进行计算,循环起点为3,终点为n。
	fn=a+b;
	for(int i=3;i<=n;i++)
	{
		fn=a+b;
		a=b;
		b=fn;
	}
接下来,我们来解决结束循环的另一个条件“当自己某一天做了大于或等于 m 题时,接下来的所有日子里,他就再也不做题了。”:
	fn=a+b;
	for(int i=3;i<=n;i++)
	{
		fn=a+b;
		a=b;
		b=fn;
		
		if(fn>=m){
			break;	
		} 	
		
	}
最后,题目要求的是“到了第 n 天,小杨总共做了多少题呢?”。这已经变得很简单了,我们只需在“正确”的位置插入累积fn的值的代码即可:
	fn=a+b;
	sum=fn;
	for(int i=3;i<=n;i++)
	{
		fn=a+b;
		a=b;
		b=fn;
		
		sum=sum+fn;		
		
		if(fn>=m){
			break;
		}
	}
至此,这个问题就解决完了。