题目总结(2024/2/4)

本文介绍了两个编程题目:涉及饮料换购策略的数学问题和基于搜索算法计算岛屿淹没的地理模拟。

[蓝桥杯 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

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值