选择题
补充知识:
printf(格式化串,参数1,参数2…),printf的参数是可变参数
格式化串:printf中的后面的参数列表按照什么格式打印
%d
:按照整型方式打印
%f
:按照float方式打印
但是格式化串有规定,%后面跟上特定的字符才代表一定的格式化,比如%Q就是无效的格式,当格式无效的时候,编译器会自动忽略%
所以printf(“%Q\n”,15) : 直接输出Q
所以对于%%,就相当于一个%
(其实这样就类似于 转义字符\\
表示一个\
)
所以答案选择 A:%%
编程题
1. 不要二
解法1
#include <iostream>
#include<vector>
using namespace std;
int main() {
int W,H;
cin >> W >> H;
int cnt = 0; //计数器
vector<vector<bool>> vv; //默认false
vv.resize(H);
for(auto& i : vv)
{
i.resize(W,true); //把所有位置设置为true
}
//遍历二维数组
for(size_t i = 0;i<H;++i)
{
for(size_t j = 0;j<W;++j)
{
//如果i,j有蛋糕,标记 i,j+2 和 i+2,j 无法放了
if(vv[i][j])
{
++cnt;
if(i+2 < H)
{
vv[i+2][j] = false;
}
if(j+2 < W)
{
vv[i][j+2] = false;
}
}
}
}
cout << cnt << endl;
return 0;
}
// 64 位输出请用 printf("%lld")
另一种解法
对于每一个位置 i,j,我们把它设置为 true
然后分别判断 (i,j-2) (i,j+2) (i-2,j) (i,j+2)是否有蛋糕
如果这四个位置有一个位置有,那么再把(i,j)设置为不可放蛋糕
如果这一次最终(i,j)能放蛋糕,cnt++
#include<iostream>
#include<vector>
using namespace std;
int main()
{
int W,H;
cin >> W >> H;
vector<vector<bool>> vv;
vv.resize(H);
int cnt = 0;
for(auto& i:vv)
{
i.resize(W);
}
//遍历
for(size_t i = 0;i<H;++i)
{
for(size_t j = 0;j<W;++j)
{
vv[i][j] = true;
//如果[i,j-2] [i,j+2] [i-2,j] [i+2,j]有一个位置有蛋糕
if(j>=2 && vv[i][j-2] || j+2<W && vv[i][j+2])
{
vv[i][j] = false;
}
if(i>=2 && vv[i-2][j] || i+2<H && vv[i+2][j])
{
vv[i][j] = false;
}
//如果i,j可以放,++cnt
if(vv[i][j]) ++cnt;
}
}
cout << cnt << endl;
return 0;
}
2. 把字符串转为整数
思路:
- 首先检验第一位是+ 还是 - 从而判断符号(用flag记录)
- 如果第一位既不是符号,也不是数字,返回0(无效字符)
- 继续遍历字符串,如果字符串为数字,那么就把数字转化为整数
- 转化为整数需要先-‘0’
- 然后加上ret的值*10 结果再保存到ret中 (ret是最终结果)
- 无效字符的情况:中途遇到非数字字符 或者溢出了
- 最后 返回ret*flag
class Solution {
public:
int StrToInt(string str) {
//不合法字符串
if(str.empty() || (str[0]!='+' && str[0]!='-' && !isdigit(str[0])))
{
return 0;
}
long long ret = 0;
int power =10;
int flag=1;
//检查符号
auto it = str.begin();
if(*it == '-')
{
flag = -1; ++it;
}
else if(*it =='+')
{
flag = 1; ++it;
}
while(it != str.end())
{
if(!isdigit(*it))
{
return 0;
}
else
{
if(ret > INT_MAX || ret < INT_MIN)
{
return 0;
}
//转化为整形
int num = *it-'0';
ret =ret*power + num;
//检验是否溢出
}
++it;
}
return ret*flag;
}
};