请修正
时间: 2024-02-18 22:03:51 浏览: 50
错误修复
修正后的代码如下:
```c++
#include <iostream>
#include <cstring>
#include <limits.h>
using namespace std;
int a[40000];
int jiyi[40000];
bool vis[40000];
int ans, n;
int dg(int x, int cnt) {
if (jiyi[x] <= cnt && jiyi[x] != -1) {
return 0;
}
jiyi[x] = cnt;
if (x == 0) {
ans = min(ans, cnt);
return 1;
}
int number1 = ((x + 1) & 32767);
int number2 = ((2 * x) & 32767);
if (!vis[number1]) {
vis[number1] = true;
dg(number1, cnt + 1);
vis[number1] = false;
}
if (!vis[number2]) {
vis[number2] = true;
dg(number2, cnt + 1);
vis[number2] = false;
}
return 0;
}
int main() {
cin >> n;
int v = (n & 32767);
cout << v << endl;
for (int i = 0; i < n; i++) {
cin >> a[i];
}
for (int i = 0; i < n; i++) {
memset(jiyi, -1, sizeof(jiyi));
ans = INT_MAX;
dg(a[i], 0);
cout << ans << " ";
}
cout << endl;
return 0;
}
```
在修正后的代码中,主要进行了如下改动:
1. 将 bool 数组 vis[] 用于标记后继元素是否已经被访问过。
2. 修改了一些语法错误,如将 if(jiyi[x] != -1) 修正为 if (jiyi[x] <= cnt && jiyi[x] != -1)。
3. 将未定义的变量 number1 和 number2 声明为 int 类型。
4. 将不规范的写法,如未初始化的变量和未定义的变量等进行修正。
5. 添加了一些必要的换行符,以提高代码的可读性。
阅读全文