[蓝桥杯 2015 省 A] 饮料换购
题目描述
乐羊羊饮料厂正在举办一次促销优惠活动。乐羊羊 C 型饮料,凭3个瓶盖可以再换一瓶 C 型饮料,并且可以一直循环下去(但不允许暂借或赊账)。
请你计算一下,如果小明不浪费瓶盖,尽量地参加活动,那么,对于他初始买入的n瓶饮料,最后他一共能喝到多少瓶饮料。
输入格式
一个整数
n,表示开始购买的饮料数量。(0<n<10000)
输出格式
一个整数,表示实际得到的饮料数。
输入输出样例
输入
100
输出
149
输入
101
输出
151
这道题的思路非常清晰:实际得到的饮料数量=购买的数量+换购的数量。考虑到两种情况,一种是刚好是3的倍数,全部换完,另一种是不是3的倍数。
AC代码如下:
#include <iostream>
#include<cmath>
using namespace std;
int maxl;
void exchange(int n)
{
if(n<3)
{
return;
}
maxl=maxl+n/3; //n瓶饮料可以换购几瓶
if(n%3==0)
{
n=n/3; //n正好是3的倍数可以换几瓶
}
else
{
n=(n/3)+(n%3); //n瓶换后还剩几瓶没换
}
return exchange(n);
}
int main()
{
int n;
scanf("%d",&n);
maxl=n; //将饮料购买数量初始化
exchange(n);
printf("%d",maxl);
return 0;
}
[蓝桥杯 2018 省 AB] 全球变暖
[蓝桥杯 2018 省 AB] 全球变暖
题目描述
你有一张某海域 N*N 像素的照片,`.` 表示海洋、 `#` 表示陆地,如下所示:
.......
.##....
.##....
....##.
..####.
...###.
.......
其中 "上下左右" 四个方向上连在一起的一片陆地组成一座岛屿。例如上图就有2座岛屿。
由于全球变暖导致了海面上升,科学家预测未来几十年,岛屿边缘一个像素的范围会被海水淹没。具体来说如果一块陆地像素与海洋相邻(上下左右四个相邻像素中有海洋),它就会被淹没。
例如上图中的海域未来会变成如下样子:
.......
.......
.......
.......
....#..
.......
.......
请你计算:依照科学家的预测,照片中有多少岛屿会被完全淹没。
输入格式
第一行包含一个整数N。(1 <= N <= 1000)。
以下N行N列代表一张海域照片。
照片保证第1行、第1列、第N行、第N列的像素都是海洋。
输出格式
一个整数表示答案。
样例
样例输入
7
.......
.##....
.##....
....##.
..####.
...###.
.......
样例输出
1
思路:本题主要是用搜索,主要思想是到达某个点后就看这个点是否遍历过,如果没有,那么就从这个点开始向四个方向开始遍历,并且把a数组变为1表示遍历过,终止条件是超出边界或者这个点为海域。
AC代码如下:
#include <iostream>
#include<string>
using namespace std;
const int maxl=1005;
int a[maxl][maxl];
string island[maxl];
int n;
int flag=1,sum;
void dfs(int x,int y)
{
if(island[x][y]=='#'&&!a[x][y])
{
a[x][y]=1;
}
else
return;
if(island[x][y+1]=='#'&&island[x][y-1]=='#'&&island[x+1][y]=='#'&&island[x-1][y]=='#')
flag=1;
dfs(x,y+1);
dfs(x,y-1);
dfs(x+1,y);
dfs(x-1,y);
}
int main()
{
int i,j;
scanf("%d",&n);
for(i=0;i<n;++i)
cin>>island[i];
for(i=0;i<n;++i)
{
for(j=0;j<n;++j)
{
if(island[i][j]=='#'&&a[i][j]==0)
{
flag=0;
dfs(i,j);
if(!flag)
{
++sum;
}
}
}
}
printf("%d",sum);
return 0;
}
QUQ
本文介绍了两个编程题目:涉及饮料换购策略的数学问题和基于搜索算法计算岛屿淹没的地理模拟。





