寒假复习之CSP真题
2026-02-04 20:40:25
发布于:北京
寒假,致力把CSP-J的真题刷完。
每道题都会写题解。
从简单到难。
P5660 [CSP-J 2019] 数字游戏
题目大意:问一串字符串中字符一的个数
使用知识点:字符串的输入和遍历
注意点:是字符串,不要int类型输入啊。
代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
string s;
cin>>s;
int sum=0;
for(int i=0;i<s.size();i++){
if(s[i]=='1')sum++;
}
cout<<sum;
return 0;
}
难度评价:入门中的入门
P5681 [CSP-J 2019 江西] 面积
题目大意:问aa 和 bc 谁更大
使用知识点:int的范围 字符串输出 if else
注意点:超出了 int 的范围 请使用 long long
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a,b,c;
int main(){
cin>>a>>b>>c;
if(a*a>b*c)cout<<"Alice";
else cout<<"Bob";
return 0;
}
难度评价:在人门中需要一点心眼,但不多
题目拓展:
这个题目,但拉出来简单,却会成为在难题中隐藏的小炸弹。
“不开long long 见祖宗”,想必各位都并不陌生。
所以在对题目进行检查的时候/做题的时候,切记要注意是否算出的答案会爆int。
(我的建议是最好直接用typedef 开,因为很多是你意想不到的:比如说折半搜索的答案最后往往是要爆的)
P7071 [CSP-J 2020] 优秀的拆分
题目大意:对于数字n,询问其是否能分解为若干个不同的2的正整数次幂。
题目思路:对于“2的次幂”,需要有一定的敏感度,联想到二进制。
代码:
#include<bits/stdc++.h>
using namespace std;
const int N=1e7;
int a[N];
int main(){
int n;
cin>>n;
int now=1;
int sn=0;
int l=0;
for(int i=1;i<=30;i++){
now*=2;
if(now&n){
a[++sn]=now;
l+=now;
}
}
if(l!=n){
cout<<-1;
return 0;
}
for(int i=sn;i>=1;i--)cout<<a[i]<<" ";
return 0;
}
难度评价:入门中的战斗机,似乎有点普及-的影子。
题目拓展:可以去用“&"判断两者之间是否互相包含。对二进制要有一定敏感度。
这里空空如也















有帮助,赞一个