青少年软件编程(C语言)等级考试试卷(四级)
分数:100 题数:4
一、编程题(共4题,共100分)
1.
开餐馆
试题编号:202012-016
试题类型:编程题
标准答案:
试题难度:一般
试题解析:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int f[1010],a[1010],v[1010];
int main()
{ int t,o,i,j,k,n,m,maxn;
cin>>t;
for(o=1;o<=t;o++)
{ cin>>n>>k;
for(i=1;i<=n;i++) cin>>a[i];
for(i=1;i<=n;i++) cin>>v[i];
memset(f,0,sizeof(f));
f[1]=v[1];
for(i=2;i<=n;i++)
{ maxn=0;
for(j=1;j<i;j++)
if(f[j]>maxn&&a[i]-a[j]>k) maxn=f[j];
f[i]=v[i]+maxn;}
maxn=0;
for(i=1;i<=n;i++) maxn=max(maxn,f[i]);
cout<<maxn<<endl;}
return 0;}
2.
邮票收集
试题编号:202012-017
试题类型:编程题
标准答案:
试题难度:一般
试题解析:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int a[1010],f[1010];
int main()
{ int n,k,i,j;
cin>>n>>k;
while(n!=0&&k!=0)
{ for(i=1;i<=n;i++) cin>>a[i];
for(i=1;i<=k;i++) f[i]=1000000000;
f[0]=0;
for(i=1;i<=n;i++)
for(j=a[i];j<=k;j++)
f[j]=min(f[j],f[j-a[i]]+1);
if(f[k]!=1000000000) cout<<f[k]<<endl;
else cout<<-1<<endl;
cin>>n>>k;}
return 0;}
3.
带通配符的字符串匹配
试题编号:202012-018
试题类型:编程题
标准答案:
试题难度:一般
试题解析:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<string>
#include<cstring>
using namespace std;
int f[3005][3005]={0},q[3005]={0},prt[3005][3005]={0};
string st1,st2;
int gcd(int a,int b)
{ if(b==0)return a;
return gcd(b,a%b);}
void Get(int x,int y)
{ if(x==0&&y==0)return;
int lx=x-1,ly=prt[x][y];
if(st1[x]=='*'&&y!=ly){q[++q[0]]=y-ly;}
Get(lx,ly);}
int main()
{ cin>>st1>>st2;
int i,j,k,bj,div,ans=0,len1=st1.length(),len2=st2.length();
st1=' '+st1;st2=' '+st2;
f[0][0]=1;
for(i=1;i<=len1;i++)
for(j=0;j<=len2;j++
202012软件编程(C语言)真题——(4级)