#include<bits/stdc++.h> using namespace std; int a[1030][1030]; void sm (int x,int y,int n) { if(!n) a[x][y]=1; else sm((x+1<<n),y,n-1); sm(x,(x+1<<n),n-1); sm((x+1<<n),(y+1<<n),n-1); } int main() { int n=0; scanf("%d",&n); sm(1,1,n); for(int i=1;i<=1<<n;i++) { for(int j=1;j<=1<<n;j++) printf("%d ",a[i][j]); cout<<endl; } return 0;为什么没有结果
时间: 2024-01-21 20:03:08 浏览: 23
这段代码没有输出结果是因为在递归函数 `sm` 中,每次递归调用都会更新数组 `a` 的值,但在主函数中输出 `a` 数组时,只输出了一次,而且是在最后输出的,这时候 `a` 数组中的值已经不是递归结束后的最终值了。为了输出正确的结果,需要在每次递归结束后就输出一次 `a` 数组。修改后的代码如下:
```c++
#include<bits/stdc++.h>
using namespace std;
int a[1030][1030];
void sm (int x,int y,int n) {
if(!n)
a[x][y]=1;
else {
sm((x+1<<n),y,n-1);
sm(x,(y+1<<n),n-1);
sm((x+1<<n),(y+1<<n),n-1);
}
// 递归结束后输出一次
for(int i=1;i<=1<<n;i++) {
for(int j=1;j<=1<<n;j++)
printf("%d ",a[i][j]);
cout<<endl;
}
}
int main() {
int n=0;
scanf("%d",&n);
sm(1,1,n);
return 0;
}
```
这样就能正确输出每次递归结束后的 `a` 数组了。
相关问题
#include <bits/stdc++.h> using namespace std;
这个头文件是C++11标准引入的,它包含了所有标准库中的头文件。使用这个头文件可以方便地在一个地方包含所有需要的头文件,而不需要一个一个地包含。这个头文件通常只在竞赛中使用,因为它不是标准C++头文件,不保证在所有编译器中都能正常工作。
以下是一个使用这个头文件的示例,实现输入4个整数a、b、c、d,将它们倒序输出:
```cpp
#include <bits/stdc++.h>
using namespace std;
int main() {
int a, b, c, d;
cin >> a >> b >> c >> d;
cout << d << ' ' << c << ' ' << b << ' ' << a << endl;
return 0;
}
```
#include <bits/stdc++.h> using namespace std
这段代码是一个C++的头文件引用和命名空间的使用示例。具体来说,`#include <bits/stdc++.h>`是一个常用的头文件引用方式,它包含了C++标准库中的所有头文件。而`using namespace std`则是为了使用`std`命名空间中的标准库函数和对象,这样就可以直接使用`cout`、`cin`等标准输入输出流对象,而不需要写`std::cout`、`std::cin`。
这种写法虽然方便,但也存在一些问题。首先,包含了所有的标准库头文件可能会导致编译时间变长。其次,使用了`using namespace std`会将整个`std`命名空间中的所有标识符引入当前作用域,可能会导致命名冲突。因此,在实际开发中,建议根据需要只包含需要的头文件,并使用具体的命名空间来避免潜在的问题。