2021.5.7 2022蓝桥杯练习赛1
本题问n的阶乘的后len为是多少,不足补前置零。
数据不大,n<=30可以直接暴力。len<=10,也就是说输出的数最大也才是一个十一位数,用long long就可以存在,所以没必要字符串模拟。
但是如果先算n!的话long long是存不下的,所以在暴力的时候每次要去%pow(10,len)
#include
using namespace std;
int main()
{
long long int n,len,sum=1,i,k;
cin>>n>>len;
long long int t=pow(10,len);
for(i=1;i<=n;i++)
{
sum*=i;
sum=sum%t;
}
k=t/10;
for(i=0;i<len;i++)
{
cout<<sum/k;
sum%=k;
k/=10;
}
}
#include
using namespace std;
int main()
{
cout<<"B";
}
#include
using namespace std;
int n,m;
int a[1005],b[1005];
set<int>c; //交集
set<int>s1; //并集 set有去重和自动排序的好处
int main(){
cin>>n;
for(int i=1;i<=n;i++) {
cin>>a[i];
s1.insert(a[i]); //将a[i]加入s1中
}
cin>>m;
for(int i=1;i<=m;i++) {
cin>>b[i];
if(s1.count(b[i])) c.insert(b[i]); //如果s1中有元素b[i],就说明数组a中也有一个元素值等于b[i],即数组A和B的交集
s1.insert(b[i]); //将b[i]加入s1中
}
set<int>::iterator it; //练习系统用不了auto ,所以自己写
for(it=c.begin();it!=c.end();it++)cout<<*it<<" "; //输出交集
puts("");
for(it=s1.begin();it!=s1.end();it++) cout<<*it<<" "; //输出并集
puts("");
sort(a+1,a+n+1); //由于数组a还没有排序,所以先排个序
for(int i=1;i<=n;i++){
if(!c.count(a[i])) cout<<a[i]<<" "; //如果不是数组A和B的交集,那么就说明当前元素a[i]只存在与数组A中而不在数组B中
}
puts("");
}
#include
using namespace std;
int main()
{
int T,m;
int t[105],v[105],f[15000];
cin>>T>>m;
for(int i=1;i<=m;i++)
{
cin>>t[i]>>v[i];
}
for(int i=1;i<=m;i++)
{
for(int j=T;j>=t[i];j--)
{
f[j]=max(f[j-t[i]]+v[i],f[j]);
}
}
cout<<f[T];
}
#include
using namespace std;
int w,n;
int a[30005];
int sum;
int main(){
scanf("%d%d",&w,&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
sort(a+1,a+n+1);
int i=1,j=n;
while(j>=i){
if(a[j]+a[i]<=w) i++;
sum++;
j--;
}
cout<<sum<<endl;
return 0;
}
#include
using namespace std;
string s;
char q,x,y;
int main(){
getline(cin,s);
cin>>q;
if(q=='D'){
cin>>x;
int i=0;
for(i=0;i<s.length();i++){
if(s[i]==x){
break;
}
else{
cout<<s[i];
}
}
for(int j=i+1;j<s.length();j++) cout<<s[j];
}
else if(q=='I'){
cin>>x>>y;
int idx;
for(int i=s.length()-1;i>=0;i--){
if(s[i]==x){
idx=i;
break;
}
}
for(int i=0;i<s.length();i++){
if(idx!=i) cout<<s[i];
else{
cout<<y<<s[i];
}
}
}
else{
cin>>x>>y;
for(int i=0;i<s.length();i++){
if(s[i]==x) cout<<y;
else cout<<s[i];
}
}
}
附:背包九讲