蛇形填数--超级大模拟--vs2022的调试技巧
目录
2、观察程序运行时变量和参数的值
2.1、自动窗口:
2.2、监视
3、相关问题
据我所经历的比赛中,只要涉及到模拟算法,一般都有蛇形填数这一项。
所谓蛇形填数,就是在矩阵中按顺时针从大到小一次填数!请看:
题目链接:
59. 螺旋矩阵 II - 力扣(LeetCode) (leetcode-cn.com)https://leetcode-cn.com/problems/spiral-matrix-ii/
这题不光要细心,还要你的代码经验足够丰富。最最重要的,调试不可缺少!
正片开始
1、开始调试和结束调试
在Visual Studio 2022中,程序编写完成之后,按 F5 键 可以运行代码。
按 F10 键 是开始调试,不同于dev c++,vs不需要打断点。在 F10 之后,F11 就是逐语句调试,也就是一句一句的执行!
调试完成会自动退出调试,但有时我们也需要自行退出调试
点击这个小红色方块,就退出调试了。
2、观察程序运行时变量和参数的值
在调试的过程中,我们需要观察变量值的变化,以确定程序的错误之处。
vs提供了两种办法:
2.1、自动窗口:
注意:vs默认调试打开自动窗口,但想要设置,必须先按 F10 开始调试,否则你看到的设置界面是这样的:
自动窗口的特点是 他可以根据你的程序变换来调整变量,即出现在右边状态栏里面的只有当前函数中已经出现的变量:
如图所示:此时程序执行到第2232行, 右边状态栏里面只显示了 变量n 此时的状态,下面的ans, i, j均没有显示,因为程序还没执行到那里。
2.2、监视
跟自动窗口不同的是:只要你设置了对变量的监视,监视可以随时观察监视变量的状态。
四个监视窗口任选一个即可。
设置了监视之后,如图
此时程序进入到了 generateMatrix 函数。可见,即使函数还没出现i,j 右边状态栏依旧存在相应的变量。
3、相关问题
有时候我们会遇到按 F10 之后会出现跟 F5 一样的效果,即直接弹出黑框让我们输入或者直接输出。
这可能是因为没有删除输出框的原因
即; 在调试之前,黑框已经存在, 此时按 F10 会直接执行代码而进入调试;
通用的解决方案:
调试除了问题,首先关闭调试,检查黑框是否存在,存在就先删除,然后重新启动调试
(没有什么是重启解决不了的,如果有,就再重启一次)。
好了,大家看看蛇形填数的代码吧~~~
//蛇形填数
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>>ans;
int arr[20][20] = { 0 };
int i = 1;
int s = 0;
int r = -1;
while (i <= n * n)
{
//右
r++;
while (r < n - s && i <= n * n)
{
arr[s][r] = i++;
r++;
}
//下
int k = s + 1;
r -= 1;
while (k < n - s && i <= n * n)
{
arr[k][r] = i++;
k++;
}
//左
k -= 1;
r--;
while (r >= s && i <= n * n)
{
arr[k][r] = i++;
r--;
}
//上
r += 1;
k--;
while (k >= 1 + s && i <= n * n)
{
arr[k][r] = i++;
k--;
}
s++;
}
for (int i = 0; i < n; i++)
{
vector<int>ret;
for (int j = 0; j < n; j++)
{
ret.push_back(arr[i][j]);
}
ans.push_back(ret);
}
return ans;
}
int main()
{
int n = 0;
cin >> n;
vector<vector<int>>ans = generateMatrix(n);
for (int i = 0; i < ans.size(); i++)
{
for (int j = 0; j < ans[i].size(); j++)
{
cout << ans[i][j] << " ";
}
cout << endl;
}
return 0;
}
记得点赞哟~~~~~~~
CTGU_ 21_ emo~~~~: 黑马程序员课程资料提取码:1234
「已注销」: 我也不用了
弥途: 总结地很清晰,不过第一个算法题的代码可能是贴错了
江湖上都叫我秋博: 你没有free
CTGU_ 21_ emo~~~~: 这个也不好说,只是个人习惯下。好多奇奇怪怪的bug都是因为版本不同,被整怕了