目录
第一题-不要二
思路:
根据题目给的公式(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2) = 4,不能等于2,说明不能在符合这个公式里面的位置放蛋糕。
首先所有下标都是整数可能的组合有0+4,1+3,2+2,其中2+2,1+3都不符合,因为没有根号,其次都是正数,所以只有0+4符合标准,说明两种情况。
x1 = x2,y1 = y2+2;或者y1 = y2, x1 = x2+2;换算成下标的话,如果在[i][j]位置放蛋糕的话,那么[i][j+2]和[i+2][j]位置都不能够放蛋糕。
#include<iostream>
#include<vector>
using namespace std;
int main ()
{
int w, h, count = 0;
cin>>w>>h;
vector<vector<int>> vv;
vv.resize(w);
//首先初始化行列都为1,即假设每个位置都有蛋糕
for(auto& e : vv)
{
e.resize(h, 1);
}
for(int i = 0; i < w; ++i)
{
for(int j = 0; j < h; ++j)
{
//每次将[i][j]位置的蛋糕记录时,就将[i][j+2]和[i+2][j]位置蛋糕置0
if(vv[i][j] == 1)
{
count++;
if(i+2<w)
vv[i+2][j] = 0;
if(j+2<h)
vv[i][j+2] = 0;
}
}
}
cout<<count<<endl;
}
第二题-字符串转整数
思路
首先判断第一个字符是否是+-,如果是,则将第一个字符都转化成'0’,便于后续遍历
记录第一个正负的同时,开始遍历字符串,然后将每一个字符串依次转化成数字即可,最后返回数字课符号
class Solution {
public:
int StrToInt(string str) {
if(str.empty()||(str[0] == '0' &&str.size() == 1)) return 0;
int flag = 0;
int sum = 0;
//确定符号
if(str[0] == '+')
{
flag = 1;
//方便后续遍历数组
str[0] = '0';
}
if(str[0] == '-')
{
flag = -1;
str[0] = '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 (sum*flag);
}
};