【每日一练】day(6)

文章目录


eg1

在这里插入图片描述
【题目解析】:
本题的重点是要读懂题意,并且需要多读两遍,才能读懂,本题本质就是在二维数组中每个坐标去放蛋糕,一个坐标位置放了蛋糕,跟他欧几里得距离为2的位置不能放蛋糕,这个就是关键点。对于两个格子坐标(x1,y1),(x2,y2)的欧几里得距离为: ( (x1-x2) * (x1-x2) + (y1-y2) * (y1-y2) ) 的算术平方根

也就是说:如果(x1,y1)放了蛋糕,则满足 ( (x1-x2) * (x1-x2) + (y1-y2) * (y1-y2) ) == 4的(x2,y2)不能放蛋糕。

( (x1-x2) * (x1-x2) + (y1-y2) * (y1-y2) ) == 4看起来是一个无解的表达式。

但是可以进行加法表达式分解:
1+3=4
3+1=4
2+2=4
0+4=4
4+0=4

【解题思路】:
仔细读理解了上面的题目解读,本题就非常简单了,使用vector<vector>定义一个二维数组,resize开空间并初始化,每个位置初始化为1,表示当蛋糕,a[i][j]位置放蛋糕,则可以标记处a[i][j+2]和a[i+1][j]位置不能放蛋糕,遍历一遍二维数组,标记处不能放蛋糕的位置,统计也就统计出了当蛋糕的位置数。
在这里插入图片描述

#include <iostream>
#include <vector>
using namespace std;

int main()
{
    int W = 0;
    int H = 0;
    int count = 0;
    
    cin >> W >> H;
    vector<vector<int>> arr;
    arr.resize(W);
    //全部初始化为1
    for(auto& e : arr)
    {
        e.resize(H, 1);
    }
    
    for(int i = 0; i < W; ++i)
    {
        for(int j = 0; j < H; ++j)
        {
            if(arr[i][j] == 1)
            {
                ++count;
                //当前格子放蛋糕, 欧几里得举例为2的不放蛋糕
               if(j + 2 < H)
                {
                    arr[i][j+2] = 0;
                }

                if(i + 2 < W)
                {
                    arr[i+2][j] = 0;
                }
            }
        }
    }
    
    cout << count << endl;
    return 0;
}

eg2

在这里插入图片描述
【解题思路】:
解题思路非常简单,就是上次计算的结果10,相当于10进制进位,然后加当前位的值。
例如:“123”转换的结果是
sum=0
sum
10+1->1
sum10+2->12
sum
10+3->123

本题的关键是要处理几个关键边界条件:

  1. 空字符串
  2. 正负号处理
  3. 数字串中存在非法字符
class Solution {
public:
int StrToInt(string str){
	if(str.empty())
		return 0;
	int symbol = 1;
	if(str[0] == '-') //处理负号
	{
		symbol = -1;
		str[0] = '0'; //这里是字符'0',不是0
	} 
	else if(str[0] == '+') //处理正号
	{
		symbol = 1;
        str[0] = '0';
	} 
	
	int sum = 0;
	for(int i=0;i<str.size();++i)
	{
		if(str[i] < '0' || str[i] > '9')
		{
		sum = 0;
		break;
		} 
	   sum = sum *10 + str[i] - '0';
	} 
	return symbol * sum;
}
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小唐学渣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值