2.26 特殊的正方形
做的时候没有多想,就是按照题目意思去模拟了一下。
我的AC代码:
#include <bits/stdc++.h>
using namespace std;
int n;
char c[110][110];
int main() {
scanf("%d", &n);
int r = 0, co = 0;
while (1) {
if (r & 1) {
for (int i = co; i < n - co; i++)
c[co][i] = '.', c[n - co - 1][i] = '.';
for(int i = r; i < n - r; i++)
c[i][r] = '.', c[i][n - r - 1] = '.';
} else {
for (int i = co; i < n - co; i++)
c[co][i] = '+', c[n - co - 1][i] = '+';
for(int i = r; i < n - r; i++)
c[i][r] = '+', c[i][n - r - 1] = '+';
}
r++;
co++;
if(r == n / 2 + 1) {
break;
}
}
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
printf("%c",c[i][j]);
}
puts("");
}
return 0;
}
wls题解思路:
分析题意其实就是每个点,到四个边距离最小值的奇偶
实现思路代码:
#include <bits/stdc++.h>
using namespace std;
int n;
char cc[110][110];
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++) {
int a = i, b = n - i + 1, c = j, d = n - j + 1;
int p = min(a, min(b, min(c, d)));
if(p & 1)
cc[i][j] = '+';
else
cc[i][j] = '.';
}
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= n; j++) {
printf("%c",cc[i][j]);
}
puts("");
}
return 0;
}
2.27 走楼梯2
呜呜呜,看了群友聊天和wls讲解思路才勉强AC,我是fw
二维dp,分析一下
f[i][j] 分几种情况进行处理,j = 0,1,2
i表示第几级台阶,j表示已经连续走过2级台阶的次数
记得要初始化
AC代码:
#include <bits/stdc++.h>
using namespace std;
int n;
long long f[60][5];
int main() {
scanf("%d", &n);
f[0][0] = 1;
f[1][0] = 1;
for(int i = 2; i <= n; i++) {
f[i][0] = f[i - 1][0] + f[i - 1][1] + f[i - 1][2];
f[i][1] = f[i - 2][0];
if(i >= 4)
f[i][2] = f[i - 4][0];
}
long long ans = f[n][0] + f[n][1] + f[n][2];
cout << ans << endl;
return 0;
}