为啥只有前两道题,因为蒟蒻只能写出来前两题(小声BB)
题目陆续补充中…
已注册CCF用户点击题目就可以做题,提交代码啦
CSP 201912-1 报数
思路: 水题,模拟即可
代码:
#include<bits/stdc++.h>
using namespace std;
bool fun(int x)
{
if(x%7==0)
{
return true;
}
int t=0;
while(x)
{
t=x%10;
if(t==7)
{
return true;
}
x/=10;
}
return false;
}
int main()
{
int n;
cin>>n;
int s[5];
memset(s,0,sizeof(s));
int cnt=1;
int i=1;
int j=1;
while(cnt<=n)
{
if(fun(j))
{
s[i]++;
}
else
{
cnt++;
}
j++;
i++;
if(i==5)
i=1;
}
for(i=1;i<=4;i++)
{
cout<<s[i]<<"\n";
}
return 0;
}
CSP 201912-2 回收站选址
思路: 使用STL库中的set进行查找,将每一个点的分数存入数组即可
代码:
#include<bits/stdc++.h>
#define repn(n) for(int i=1;i<=n;i++)
#define rep(n) for(int i=0;i<n;i++)
#define ll long long
using namespace std;
const int maxn=1e4;
int s[6];
struct Point{
int x;
int y;
}p[maxn];
set<pair<int,int> > vis;
bool fnd(int x,int y)
{
if(vis.count(pair<int,int>(x-1,y))==0)
return false;
if(vis.count(pair<int,int>(x+1,y))==0)
return false;
if(vis.count(pair<int,int>(x,y+1))==0)
return false;
if(vis.count(pair<int,int>(x,y-1))==0)
return false;
return true;
}
int getmark(int x,int y)
{
int ans=0;
if(vis.count(pair<int,int>(x+1,y+1)))
ans++;
if(vis.count(pair<int,int>(x+1,y-1)))
ans++;
if(vis.count(pair<int,int>(x-1,y+1)))
ans++;
if(vis.count(pair<int,int>(x-1,y-1)))
ans++;
return ans;
}
int main()
{
memset(s,0,sizeof(s));
int n;
cin>>n;
rep(n)
{
cin>>p[i].x>>p[i].y;
vis.insert(pair<int,int>(p[i].x,p[i].y));
}
rep(n)
{
if(fnd(p[i].x,p[i].y))
{
s[getmark(p[i].x,p[i].y)]++;
}
}
n=5;
rep(n)
{
cout<<s[i]<<endl;
}
return 0;
}
CSP 201903-2 24点
思路:使用栈来储存数字,由于乘和除的优先级较高,计算后再压入栈,最后将栈内所有元素加起来即可
ps:有一个小窍门,可以将 (-) 转换为 +(-)
代码:
#include<bits/stdc++.h>
#define repn(n) for(int i=1;i<=n;i++)
#define rep(n) for(int i=0;i<n;i++)
#define ll long long
using namespace std;
const int maxn=1e3+5;
stack<int> num;
void fun(string s)
{
int n,tp;
n=s.size();
rep(n)
{
if(s[i]>='0'&&s[i]<='9')
{
num.push(s[i]-'0');
}
else if(s[i]=='+'||s[i]=='-')
{
if(s[i]=='-')
{
tp=-1*(s[i+1]-'0');
num.push(tp);
i++;
}
}
else if(s[i]=='x'||s[i]=='/')
{
tp=num.top();
num.pop();
if(s[i]=='x')
{
tp=tp*(s[i+1]-'0');
num.push(tp);
i++;
}
else
{
tp=tp/(s[i+1]-'0');
num.push(tp);
i++;
}
}
}
int ans=0;
while(!num.empty())
{
ans=ans+num.top();
num.pop();
}
if(ans==24)
cout<<"Yes\n";
else
cout<<"No\n";
}
int main()
{
int n;
cin>>n;
while(n--)
{
string s;
cin>>s;
fun(s);
}
}
CSP 201809-1 卖菜
思路:这种题需要啥思路??直接写 QAQ
代码:
#include<stdio.h>
#include<math.h>
#include<iostream>
#include<string.h>
using namespace std;
int main()
{
int n,i;
int s[1002];
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&s[i]);
}
for(i=1;i<=n;i++)
{
int t;
if(i==1)
{
t=(int)((s[1]+s[2])/2);
printf("%d",t);
}
else if(i==n)
{
t=(int)((s[i-1]+s[i])/2);
printf(" %d\n",t);
}
else
{
t=(int)((s[i]+s[i-1]+s[i+1])/3);
printf(" %d",t);
}
}
return 0;
}
CSP 201809-2 买菜
思路: 将甲的每个时间端的开始时间存到数组里面,再利用二分查找乙和甲的重叠时间,就是结果…
代码:
#include<bits/stdc++.h>
#define repn(n) for(int i=1;i<=n;i++)
#define rep(n) for(int i=0;i<n;i++)
#define pb push_back
#define ll long long
using namespace std;
vector<int> vis;
bool fnd(int x)
{
int h=vis.size()-1,l=0;
while(l<=h)
{
int mid=(l+h)/2;
if(vis[mid]==x)
return true;
else if(vis[mid]<x)
l=mid+1;
else
h=mid-1;
}
return false;
}
void getnum(int n)
{
int x,y;
repn(n)
{
cin>>x>>y;
for(int j=x;j<y;j++)
vis.pb(j);
}
}
int getscore(int n)
{
int x,y;
int ans=0;
repn(n)
{
cin>>x>>y;
for(int j=x;j<y;j++)
{
if(fnd(j))
ans++;
}
}
return ans;
}
int main()
{
int n;
cin>>n;
getnum(n);/
int res=getscore(n);
cout<<res<<endl;
return 0;
}
来源:CSDN
作者:Hha23333
链接:https://blog.csdn.net/qq_46057644/article/details/104227398