csp
lhx_cqupt
这个作者很懒,什么都没留下…
展开
-
CSP第二题公共钥匙盒
这题算法实在经典:先用1-N个数组元素保存钥匙,1-N bool型元素保存某号钥匙是否到了要还的时候了,1-K个结构体数组元素来保存老师的信息。利用时间来判断某一个时刻该还的和该借的,当某一个时刻要还的时候先遍历一遍,将要还的钥匙的编号打上标记,也就是使其为TRUE,这时候再从小遍历钥匙数组,是0的地方就直接插入进去,这样又保证了先从小的编号处开始还。借钥匙是将这个老师所需要的钥找到后使该位置的元素为0即可。从时刻来操作的话又使得每次实现了先还后借的需求。#include <iostream&g.原创 2021-03-24 10:09:30 · 143 阅读 · 0 评论 -
CSP第二题消除类游戏
思路:定义两个数组,其中一个用来保存棋盘信息,另一个用来作为新的位置标记,这个思路很有用,一个数组存信息一个数组做位置标记。两番遍历数组,第一次是横着遍历,为了使横排连着三个相等的位置被记录,这个时候就使列++之后再使行++,还有就是要注意列数遍历到n-2个位置即可因为后面还要加的。找连行相等也是同理,但是现在是使行先++完了再使列++,也要注意行只能到倒数第二行,因为还要加二。#include <iostream>using namespace std;int main(){ in.原创 2021-03-24 10:04:09 · 73 阅读 · 0 评论 -
CSP第二题窗口
这是一个较难的题目。题意分析:输入n个窗口m个鼠标落下的坐标,若鼠标落在了几个窗口上,那么优先输出位于上方的窗口,重叠是指几个窗口彼此压在一起,这样的话先输入的窗口反而会在最下面,输出了在上方的窗口后,要将该窗口移到最上层来。思路分析:由于坐标杂,因此用结构体类型数据分别保存鼠标击点以及窗口的信息,关键要建立先键入的窗口反而在下面的这种映射关系。于是用一个int型数组将先输入的反而设置到最大的序号。将点到的窗口移到最上层也是只需调整这个序号数组即可。#include <iostream>.原创 2021-03-24 09:57:50 · 377 阅读 · 0 评论 -
CSP第二题ISBN号码
使用c++字符串容器,直接将输入存到字符串容器后,通过前9位数据求sum,但求的时候要注意因为字符串容器中的数据是字符变量因此要减去’0’;之后直接sum%11,结果直接给到char c,若c等于10,那就将c赋值为X否则c=c+’0’;然后将字符串最后一位与c比较,若相同则输出Right,若不同直接将c给最后一个元素。#include <iostream>#include <string>using namespace std;int main(){ string s;.原创 2021-03-24 09:53:20 · 90 阅读 · 0 评论 -
2021-03-24
这个题非常的简单,题意有点拐弯抹角,关键要理解题意:学生的分数是score,重要程度是w,每次将键入的w和score乘起来后相加求累加的和,这里这个ReLU函数实际上就是烟雾弹,意思就是若一个数比和0比大小谁大就返回谁。#include <iostream>#include <math.h> using namespace std;int ReLU(int x){ if(x>0){ return x; }else{ return 0; }}int .原创 2021-03-24 09:47:11 · 80 阅读 · 0 评论 -
CSP第一题线性分类器
这个题的难度不小,先理清题意:输入n个点,其中每个点都属于A类或者B类。再输入m组数据,是方程的参数,这组数据可以确定一条直线,若直线可以将分属于不同类别的点完全的分隔开,那么就输出yes,否则输出no。据此题意一点点实现:首先是如何将点的数据保存下来,因为分属于不同的类别的点要将其分离开所有使用字符变量接收键入的类别数据,而后判断之,分别将其归入不同的数组。还有一个问题,一个点的坐标是两个,故一共要开四个数组分别保存数据。现在解决第二个问题,键入三组数据,如何判断是不是将AB组数据分开了呢,只需判断将x原创 2021-03-24 09:45:58 · 188 阅读 · 0 评论 -
CSP第一题跳一跳
问题实际上意思是这样的:遇到1就加一分,不论是连续第几个1。遇到2的话就有规矩了,遇到第一次2就加两分,遇到连续的第二次加四分……以此类推。遇到0就结束。因此创建数组接收输入的数,没有指定几个,但0肯定是末尾,所有设最大的结束标志是i=30,而后再键入数据是0时立即跳出循环。故序号0-i都是有数据的。第二个循环用来遍历输入的数据,遇到0直接结束,遇到1加一分并将flag归为0,因为flag代表的就是这是第几个连续的2,一旦有了1,那么2的连续次数就归零。一旦遇到2先把flag+1,再在原先的基础上+f.原创 2021-03-24 09:39:18 · 151 阅读 · 0 评论 -
CSP第一题找出相差最小的两个数的绝对值
求一组数据中最小的差值,即遍历两次数组即可,第二轮循环在第一轮的下一个元素开始,并求两个值之间差的绝对值,若小于min就将其赋给min,这样循环过后min的值一定是数据间最小的差值。#include <iostream>#include <math.h>using namespace std;int main(){ int m,min=10000,i,a[1000],j,temp; cin>>m; for(i=0;i<m;i++){ cin>原创 2021-03-24 09:30:53 · 160 阅读 · 0 评论 -
CCF第十二次第一题:打酱油
问一定金额的钱最多可以打多少酱油,而题意中打50块钱的送得最多,打30块钱的次之,故问题转化为优先将钱分成最多的50块钱(money/50),分完以后再将剩下的钱分成尽可能多的30,最后再用剩下的去打。#include <iostream>using namespace std;int main(){ int m,fiveTen,threeTen,ten,num; cin>>m; fiveTen=m/50; threeTen=(m-fiveTen*50)/30; te原创 2021-03-19 09:59:32 · 118 阅读 · 0 评论 -
CSP第十一次第一题:分蛋糕
思路:定义一个变量来保存一个小朋友分到的蛋糕,内循环当分到的蛋糕达到规定的值就跳出,然后判断外面循环,外循环跳出的条件是所有的蛋糕分完了,也就是数组遍历完了,当然,到数组遍历完了之后内循环也要跳出,所有在跳出内循环的时候要判断分到的蛋糕是不是大于0,只要比0大就说明多一个小朋友分到了蛋糕。*******一定要注意跳出内循环以后将小朋友人数加一以后不要忘记将保存蛋糕的变量清零。不然会死循环出不来。代码如下:#include <iostream>using namespace std;in原创 2021-03-19 09:57:53 · 220 阅读 · 0 评论 -
CSP第十次第一题:寻找中间数
题意:找间值(比自己大的数的个数和比自己小的值的个数相等的话那么这个值就是中间值)。思路:定义两个变量分别用来保存比自己大的数的数目和比自己小的数的数目。两个循环,第一个循环拿到需要去判断的数,第二个循环用来依次用数和它对比。当所有的数都与该数对比完后,两个变量的值相等那它就是中间数,一旦得到中间数就不进行下面的操作了,不然可能得到重复的中间数。直接break;****值得注意的是每一轮比较完了以后一定要记得将保存大的数和小的数的变量归零。#include <iostream>using原创 2021-03-19 09:51:58 · 355 阅读 · 0 评论 -
CSP第九次第一题:股票最大波动
要求波动最大的值,也就是求某一个值的后一个数和自己相差的绝对值,找相邻数绝对值的最大值即可。#include <iostream>#include <math.h>using namespace std;int main(){ int m,i,max=0,a[1000]; cin>>m; for(i=0;i<m;i++){ cin>>a[i]; } for(i=0;i<m-1;i++){ if((abs(a[i]-a[i+原创 2021-03-19 09:44:34 · 128 阅读 · 0 评论 -
CSP第八次第一题:求折点个数
输入一组数据求折点个数,观察发现折点是指前一个数据比它大后一个数据也比它大,或者前一个数据比它小,后一个数据也比它小的数,因此直接将数据存入数组后用if判断该数是否满足上述条件即可。值得注意的是:遍历数组开始时的数肯定是数组里面的第二个数,这样i-1才不会出现问题,还有遍历的最后一个数是数组的倒数第二个数,只有这样i+1才不会出现问题。代码如下:#include <iostream>using namespace std;int main(){ int m,i,sum=0; cin&原创 2021-03-19 09:42:39 · 154 阅读 · 0 评论 -
CSP第七次第一题:数位之和
非常简单的题目,直接取位数相加即可;#include <iostream>using namespace std;int main(){ long a; cin>>a; int tenBi=a/1000000000; int bi=(a-tenBi*1000000000)/100000000; int thWan=(a-tenBi*1000000000-bi*100000000)/10000000; int huWan=(a-tenBi*1000000000-bi*原创 2021-03-19 09:40:55 · 152 阅读 · 0 评论 -
CSP第六次第一题
要求一串数中有几段数列,而相同的算一段,那么直接当一个数和它下一个数不同时使sum++就行了。如果和它下一个数相同,那就什么也不做继续循环continue。#include <iostream>using namespace std;int main(){ int a[1000],m,i,sum=0; cin>>m; for(i=0;i<m;i++){ cin>>a[i]; } for(i=0;i<m;i++){ if(a[i]!=a[原创 2021-03-19 09:39:26 · 43 阅读 · 0 评论 -
CSP第五次第一题:图像旋转
做这种题显然是使用二维数组将输入的数据存储进来,关键在于找到规律后将数据存储到另一个数组后进行输出即可。我是先将矩阵逆过来后发现只需再将行的值变一下就行了。#include <iostream>using namespace std;int main(){ int n,m,i,j; cin>>n>>m; int a[n+1][m+1],b[m+1][n+1],c[m+1][n+1],temp=m+1; for(i=1;i<=n;i++){ for(原创 2021-03-19 09:37:03 · 167 阅读 · 0 评论 -
CCF第四次第一题:进出图书馆次数
两种方法都很简单,第一种方法是直接将学生编号作为数组的序号然后对应序号的值++,再将每一次的值直接输出即可。第二种和第一种思路差不多,不过第二种是将每次该人进入图书馆的次数单独放一个数组之后再输出。//方法1:#include <iostream>using namespace std;int main(){ int temp,m,sum=0,a[1000]={0},i; cin>>m; for(i=0;i<m;i++){ cin>>temp;原创 2021-03-19 09:34:28 · 140 阅读 · 0 评论 -
CSP2020年9月第一题检测点
题意:输入m个检测点、以及一个人的位置坐标,而后计算出离这个人最近的三个监测点,若有距离相同的点,那就先输出序号小的点,并输出其序号。方法一思路: 要比较的是距离,若距离相同还要比较它的序号,因此不妨将二者存到一个结构体变量中,也即一个结构体反映一个监测点的信息,若干个结构体,所以用容器vector来装。完了以后直接调用sort函数对容器进行排序即可。要注意sort函数里面的cmp参数也就是排序规则这个参数的写法。#include <vector>#include <iostrea原创 2021-03-19 09:26:26 · 337 阅读 · 0 评论 -
CCF第三次第一题:
判断一组数据中有没有相邻数对,也就是一对数的相差为1,直接像上一题一样遍历之后判断后面的数有没有和这个数相减绝对值为1的即可。Fabs、abs皆可。但一定要注意的一个点是sum必须初始化为0,不然就会失败。因此,在以后的编程中一个值,或者是数组一旦创建我们都要习惯性的为其赋初值。#include <iostream>#include <math.h>using namespace std;int main(){ int m,i,j,a[1000]={0},temp,num.原创 2021-03-18 21:07:32 · 51 阅读 · 0 评论