NC200628. 小李堆积木
描述
输入描述
第一行 输入一个t,代表数据组数(1<=t<=10)第二行 输入一个n,代表要求第n阶段是什么(1<=n<=10)
输出描述
下面t组数据,分别输出第n阶段的积木堆的情况
示例1
输入:
3 1 2 3
输出:
1 1 1 0 1 1 1 1 1 0 1 0 1 0 0 1 1 1 0 0 1
C++14(g++5.4) 解法, 执行用时: 49ms, 内存消耗: 5216K, 提交时间: 2020-01-05 16:41:51
#include<iostream> #include<cmath> using namespace std; int num[1025][1025]; void creat(int x) { int xx=pow(2,x-1); int yy=xx; for(int i=1;i<=xx;i++) { for(int j=1;j<=yy;j++) { num[i][yy+j]=num[i][j]; num[xx+i][yy+j]=num[i][j]; if(num[i][j]) num[xx+i][j]=0; else num[xx+i][j]=1; } } } int main() { num[1][1]=1; num[1][2]=1; num[2][1]=0; num[2][2]=1; for(int i=2;i<=10;i++) { creat(i); } int t; cin>>t; while(t--) { int n; cin>>n; int len=pow(2,n-1); for(int i=1;i<=len;i++) { for(int j=1;j<=len;j++) { if(j>1) printf(" "); printf("%d",num[i][j]); } printf("\n"); } } }
C++11(clang++ 3.9) 解法, 执行用时: 80ms, 内存消耗: 17504K, 提交时间: 2020-01-08 22:02:19
#include<bits/stdc++.h> #define rep(i,s,e) for(int i=s; i<e; ++i) using namespace std; int a[2050][2050]; int main(){ a[0][0]=1; rep(i,0,11){ int m=1<<i; rep(j,0,m) rep(k,0,m){ a[j][k+m]=a[j+m][k+m]=a[j][k]; a[j+m][k]=!a[j][k]; } } int _; cin>>_; while(_--){ int n; cin>>n; n--; int m=1<<n; rep(i,0,m) rep(j,0,m) cout<<a[i][j]<<(char)(j==m-1?'\n':' '); } }