题解:P5461 赦免战俘
wangyang168 · · 题解
思路:
在做这道题之前,建议大家去做一下 P5732杨辉三角,为什么这样说呢?因为这道题其实有一个递推解,和杨辉三角极为相似。我们把整个方阵看作一个二维数组
#include<bits/stdc++.h>
using namespace std;
int shj(int n){
return 1<<n;
}
int main(){
bool a[5000][5000]={0};
int n;
cin>>n;
int n2=shj(n);
a[1][1]=0;
for(int i=1;i<=n2;++i){
for(int j=1;j<=n2;++j){
a[i][j]=(a[i-1][j+1]+a[i-1][j])%2;
}
}
for(int i=1;i<=n2;++i){
for(int j=1;j<=n2;++j){
cout<<a[i][j]<<' ';
}
cout<<'\n';
}
return 0;
}
然而却输出了一堆
我们继续来看,方阵第一行大多都是
#include<bits/stdc++.h>
using namespace std;
int shj(int n){
return 1<<n;
}
int main(){
bool a[5000][5000]={0};
int n;
cin>>n;
int n2=shj(n);
a[1][n2]=1;
for(int i=1;i<=n2;++i){
for(int j=1;j<=n2;++j){
a[i][j]=(a[i-1][j+1]+a[i-1][j])%2;
}
}
for(int i=1;i<=n2;++i){
for(int j=1;j<=n2;++j){
cout<<a[i][j]<<' ';
}
cout<<'\n';
}
return 0;
}
然而却依然是一堆
我们再来看,我们虽然把
代码:
#include<bits/stdc++.h>
using namespace std;
int shj(int n){
return 1<<n;
}
int main(){
bool a[5000][5000]={0};
int n;
cin>>n;
int n2=shj(n);
a[1][n2]=1;
for(int i=2;i<=n2;++i){
for(int j=1;j<=n2;++j){
a[i][j]=(a[i-1][j+1]+a[i-1][j])%2;
}
}
for(int i=1;i<=n2;++i){
for(int j=1;j<=n2;++j){
cout<<a[i][j]<<' ';
}
cout<<'\n';
}
return 0;
}