T1:不要二
链接:不要二_牛客题霸_牛客网 (nowcoder.com)
描述
二货小易有一个W*H的网格盒子,网格的行编号为0~H-1,网格的列编号为0~W-1。每个格子至多可以放一块蛋糕,任意两块蛋糕的欧几里得距离不能等于2。
对于两个格子坐标(x1,y1),(x2,y2)的欧几里得距离为:
( (x1-x2) * (x1-x2) + (y1-y2) * (y1-y2) ) 的算术平方根
小易想知道最多可以放多少块蛋糕在网格盒子里。
输入描述:
每组数组包含网格长宽W,H,用空格分割.(1 ≤ W、H ≤ 1000)
输出描述:
输出一个最多可以放的蛋糕数
反向推,欧几里得距离为2,2也就是根号4,凑成4有三种情况凑成:0+4、1+3、2+2
但是(x1-x2)*(x1-x2) 不可能是3或者2,所以只能由0+4组成。固定好一个位置X后,另外一个位置不能在这个X的正四个方位的俩个格子处。
下图是8*8的情况
看图能发现答案和%4有关。
#include<iostream>
using namespace std;
int n,m;
int main()
{
cin>>n>>m;
int ans1=0,ans2=0;
int cnt1=0,cnt2=0;
for(int i=1;i<=n;i++){
if(i%4!=3&&i%4!=0) ans1++;
else cnt1++;
}
for(int i=1;i<=m;i++){
if(i%4!=3&&i%4!=0) ans2++;
else cnt2++;
}
cout<<ans1*ans2+cnt1*cnt2<<endl;
return 0;
}
T2:将字符串转化为整数
链接:将字符串转化为整数__牛客网 (nowcoder.com)
实现函数 atoi 。函数的功能为将字符串转化为整数
提示:仔细思考所有可能的输入情况。这个问题没有给出输入的限制,你需要自己考虑所有可能的情况。
atoi函数位于cpp <stdlib.h>库。该函数舍弃字符串前全部空白符,直至找到一个合法的数字或者正负号后开始读取,然后尽可能读取多的字符组成合法的整数表示,并返回这个合法的整数,值得注意的是,当读取到一个非法字符后将直接停止读取数字并返回当前已转换结果。注意,数学中e表示数的幂在该函数定义中是非法字符。当输入数字超出返回数据类型范围是一个未定义行为(undefined behavior),本题保证不会出现这种情况。
数据范围:字符串长度满足 0≤n≤100
要求:空间复杂度 O(1),时间复杂度 O(n)
class Solution{
public:
int atoi(const char *str){
if(str==NULL){
return 0;
}
int ans=0;
int n=strlen(str);
int flag=1;
for(int i=0;i<n;i++){
if(str[i]>='0'&&str[i]<='9'){
ans=ans*10+str[i]-'0';
}
else if(str[i]=='-')flag=-1;
else if(str[i]==' '||str[i]=='+')continue;
else return ans*flag;
}
return ans*flag;
}
};
中秋和国庆要到了,Rush Rush!
晚上要好好规划 狂补基础