比赛题目链接:第 22 场 小白入门赛 - 蓝桥云课
1.变身
#include <iostream>
using namespace std;
int main()
{
cout<<5<<endl;
return 0;
}
2.消灭卡片
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int t,n;
int main()
{
cin>>t;
while(t--)
{
int count=0;
cin>>n;
while(n>=0)
{
if(n%5==0) //数由3和5组成,贪心想法如果存在解,减去最少的3个数,剩下的用5个数
{
count+=n/5;
cout<<count<<endl;
break;
}
else
{
n-=3;
count++;
}
}
if(n<0)
{
cout<<-1<<endl;
}
}
return 0;
}
3.招募队员
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n;
int a[100010][10];
int ans[6]={0};
int main()
{
cin>>n;
for(int i=1; i<=n; i++)
{
for(int j=1;j<=5;j++)
{
int temp;
cin>>temp;
a[i][temp]++; //
}
}
for(int i=1;i<=5;i++)
{
int num=0; //列连续个数
for(int j=1;j<=n;j++)
{
if(a[j][i]==0) //不连续
{
ans[i]=max(ans[i],num); //存取最大连续
num=0;
}
else
{
num++;
}
}
ans[i]=max(ans[i],num);
}
for(int i=1;i<=5;i++)
{
cout<<ans[i]<<" ";
}
return 0;
}
4.能量晶石
//所有数加1等于某一个数字减1,需要多少次操作,将所有数变为数组的最小值
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n,min1=INT_MAX;
int a[100010];
ll sum=0;
int main()
{
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
sum+=a[i];
min1=min(min1,a[i]);
}
cout<<sum-(ll)min1*n<<endl;
return 0;
}
5.缺失的环节
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n;
string s;
int main()
{
cin>>n>>s;
set<int>nums;
for(int i=0; i<s.size(); i++)
{
int temp=0; //字串二进制对应的十进制数
for(int j=i; j<s.size(); j++)
{
temp=temp*2+(int)(s[j]-'0');
if(temp>1e6)
{
break;
}
nums.insert(temp);
}
}
int min1=0; //最小不存在的数
while(nums.count(min1))
{
++min1;
}
cout<<min1<<endl;
return 0;
}
总结:
1.消灭卡片,贪心思想解决两个组合数
2.招募队员理解题目的意思
3.能量晶石反向思想
4.缺失的环节暴力遍历
寻找最小不连续数:
int min1=0; //最小不存在的数
while(nums.count(min1))
{
++min1;
}
cout<<min1<<endl;