1、P8627 [蓝桥杯 2015 省 A] 饮料换购
乐羊羊饮料厂正在举办一次促销优惠活动。乐羊羊C型饮料,凭3个瓶盖可以再换一瓶C型饮料,并且可以一直循环下去(但不允许暂借或赊账)。
请你计算一下,如果小明不浪费瓶盖,尽量地参加活动,那么,对于他初始买入的 n 瓶饮料,最后他一共能喝到多少瓶饮料。
输入格式
输入一个整数 n,表示初始买入的饮料数量。
输出格式
输出一个整数,表示一共能够喝到的饮料数量。
数据范围
0<n<10000
思路:一个硬做的题目,没用什么方法,按照题意直接写,注意中的字母不要写错就ok
#include<iostream>
using namespace std;
int n,count,s1,s2,s3;
int main(){
scanf("%d",&n);
count+=n;
while(n/3>=1){
s1=n/3;
s2=n%3;
n=s1+s2;
count+=s1;
}
s3=s1+s2;
while(s3>=3){
count+=s3/3;
s3=s3/3+s3%3;
}
cout<<count<<endl;
return 0;
}
2、P8668 [蓝桥杯 2018 省 B] 螺旋折线
这道题目比较恶心,要找出每条边的规律,需要做到不重不漏
如果对于每条边只是简单的判断x和y的关系容易造成重复,最好是列出一个方程,这样比较安全
#include<iostream>
using namespace std;
long long x,y,sum;
int main(){
cin>>x>>y;
if(y>=abs(x)){
//这种情况是上面向右边y=-x,y都是一样的
//这条边上的特殊点的长度是2y*(2y-1)
sum=2*y*(2*y-1)+x+y;
}
else if(x>=abs(y)&&x>0){
//这种情况是右边向下的边
//特殊点y==x 长度是2*x*2*x
sum=2*x*2*x+(x-y);
}
else if(x>y&&y<0){
//这种情况是下面向左的边,y不变
//特殊点是y=-x长度是(x-y)*(x-y+1)
sum= 2*y*(2*y-1)+(-y-x);
}
else{
//这种是左向上的边,x不变
//特殊点y=x+1
sum=(2*x+1)*(2*x+1)+(y-x-1);
}
cout<<sum<<endl;
return 0;
}
3、P8748 [蓝桥杯 2021 省 B] 时间显示
小蓝要和朋友合作开发一个时间显示的网站。在服务器上,朋友已经获取了当前的时间,用一个整数表示,值为从 1970 年 1 月 1 日 00:00:00 到当前时刻经过的毫秒数。
现在,小蓝要在客户端显示出这个时间。小蓝不用显示出年月日,只需要 显示出时分秒即可,毫秒也不用显示,直接舍去即可。
给定一个用整数表示的时间,请将这个时间对应的时分秒输出。
输入格式
输入一行包含一个整数,表示时间。
输出格式
输出时分秒表示的当前时间, 格式形如 HH:MM:SSHH:MM:SS, 其中 HHHH 表示时, 值 为 00 到 23,MM23,MM 表示分。值为 00 到 5959。SSSS 表示秒, 值为 00 到 5959。时、分、秒不足两位时补前导 0
。
思路:小时=t%86400/3600
分钟=t%3600/60
秒=t%60
#include<iostream>
using namespace std;
int main(){
long long t;
cin>>t;
t=t/1000;
int h=t%86400/3600;
int m=t%3600/60;
int s=t%60;
printf("%02d:%02d:%02d\n",h,m,s);
return 0;
}
4、P8781 [蓝桥杯 2022 省 B] 修剪灌木
爱丽丝要完成一项修剪灌木的工作。
有 N 棵灌木整齐的从左到右排成一排。爱丽丝在每天傍晩会修剪一棵灌木,让灌木的高度变为 00 厘米。爱丽丝修剪灌木的顺序是从最左侧的灌木开始,每天向右修剪一棵灌木。当修剪了最右侧的灌木后,她会调转方向,下一天开始向左修剪灌木。直到修剪了最左的灌木后再次调转方向。然后如此循环往复。
灌木每天从早上到傍晩会长高 11 厘米, 而其余时间不会长高。在第一天的早晨, 所有灌木的高度都是 00 厘米。爱丽丝想知道每棵灌木最高长到多高。
输入格式
一个正整数 N ,含义如题面所述。
输出格式
输出 N 行, 每行一个整数, 第行表示从左到右第 i 棵树最高能长到多高。
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int n;
cin>>n;
int maxn[n]={0};
for(int i=1;i<=n;i++){
maxn[i]=max(2*(n-i),2*(i-1));
}
for(int i=1;i<=n;i++)
cout<<maxn[i]<<endl;
return 0;
}
5、P8723 [蓝桥杯 2020 省 AB3] 乘法表
注意处理最后10转换成A之类的问题就ok
#include<iostream>
using namespace std;
int main(){
int n,k=0;
char oo;
int m[100]={0};
cin>>n;
for(int i=1;i<n;i++){
for(int j=1;j<=i;j++){
//cout<<i<<"*"<<j<<"=";
if(i<10) cout<<i;
else oo='A'+i-10,cout<<oo;
cout<<'*';
if(j<10) cout<<j;
else oo='A'+j-10,cout<<oo;
cout<<"=";
int s=i*j;
k=0;
if(s<n) //cout<<s;
{
if(s<10) cout<<s;
else oo='A'+s-10,cout<<oo;
}
else {
while(s/n!=0){
m[k]=s%n;
s=s/n;
k++;
}
//cout<<s;
if(s<10) cout<<s;
else oo='A'+s-10,cout<<oo;
for(int p=k-1;p>=0;p--) {
if(m[p]<10) cout<<m[p];
else oo='A'+m[p]-10,cout<<oo;
}
}
cout<<" ";
}
cout<<endl;
}
return 0;
}
6、P8662 [蓝桥杯 2018 省 AB] 全球变暖
是你最喜欢的bfs问题哟,看看你有没有忘记 (30分钟之后搞完了,事实证明我已经忘得一干二净了)基本思路是,先把这块连通的岛上的全部陆地数出来,再数会变成海洋的陆地数量,两者详见就可以
#include<iostream>
#include<queue>
using namespace std;
const int N=1009;
int n,total,sea,count;
long long ans;
char f[N][N];
int visit[N][N];
struct point{
int x;
int y;
};
int dx[4]={0,-1,0,1};
int dy[4]={-1,0,1,0};
int check(int x,int y){
for(int i=0;i<4;i++){
if(f[x+dx[i]][y+dy[i]]=='.') return 1;
}
return 0;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++)
cin>>f[i][j];
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(f[i][j]=='#'&&visit[i][j]==0) {
ans++;
visit[i][j]=1;
total=1;
sea=0;
if(check(i,j)==1) sea++;
point cur,next;
queue<point> que;
cur.x=i;
cur.y=j;
que.push(cur);
while(!que.empty()){
cur=que.front() ;
que.pop();
for(int k=0;k<4;k++){
int nx=cur.x+dx[k];
int ny=cur.y+dy[k];
if(nx<1||nx>n||ny<1||ny>n) continue;
if(f[nx][ny]=='#'&&visit[nx][ny]==0){
visit[nx][ny]=1;
next.x=nx;
next.y=ny;
total++;
if(check(next.x,next.y)==1) sea++;
que.push(next);
}
}
}
if(total==sea) count++;
}
}
}
cout<<count<<endl;
return 0;
}