NC200317. Triangle
描述
输入描述
第一行输入一个正整数n,含义同题目描述。
* 数据范围:
输出描述
打印图形。
示例1
输入:
1
输出:
./\ /__\
说明:
第一行开头的符号是一个"."(不包含双引号),之后是"/","\"示例2
输入:
2
输出:
.../\ ../__\ ./\../\ /__\/__\
示例3
输入:
3
输出:
......./\ ....../__\ ...../\../\ ..../__\/__\ .../\....../\ ../__\..../__\ ./\../\../\../\ /__\/__\/__\/__\
C(clang11) 解法, 执行用时: 21ms, 内存消耗: 4344K, 提交时间: 2020-10-25 17:37:10
#include<stdio.h> #include<math.h> char map[2500][2500]={'\0'}; void fun(int x,int y,int daxiao,int n) { int f=pow(2,n-1); if(n==1) { map[x][y]='/'; map[x][y+1]='\\'; map[x+1][y-1]='/'; map[x+1][y]='_'; map[x+1][y+1]='_'; map[x+1][y+2]='\\'; } else { fun(x,y,daxiao/4,n-1); fun(x+f,y-f,daxiao/4,n-1); fun(x+f,y+f,daxiao/4,n-1); } } int main(void) { int n; scanf("%d",&n);int h=pow(2,n-1)*4;int p=pow(h,2);int q=pow(2,n); fun(1,h/2,p,n); int a,b; for(a=1;a<=q;a++) { for(b=1;b<=h/2+a;b++) { if(map[a][b]=='\0')printf("."); else printf("%c",map[a][b]); } printf("\n"); } }
C++11(clang++ 3.9) 解法, 执行用时: 35ms, 内存消耗: 1956K, 提交时间: 2020-06-14 15:44:51
#include<iostream> using namespace std; int n, a[1030] = { 1 }; int main() { cin >> n; for(int i = 0; i < 1 << n; ++ i) { for(int j = 1; j < (1 << n) - i; ++ j) cout << "."; for(int j = i; j >= 0; -- j) a[j] ^= a[j - 1]; if(!(i % 2)) for(int j = 0; j <= i; ++ j) cout << (a[j] ? "/\\" : ".."); else for(int j = 0;j <= i; j += 2) cout << (a[j] ? "/__\\" : "...."); cout<<endl; } return 0; }
C++14(g++5.4) 解法, 执行用时: 40ms, 内存消耗: 1876K, 提交时间: 2020-06-14 16:28:30
#include<iostream> using namespace std; int n,a[1030]={1}; int main(){ cin>>n; for(int i=0;i<1<<n;++i){ for(int j=1;j<(1<<n)-i;++j)cout<<"."; for(int j=i;j>=0;--j)a[j]^=a[j-1]; if(!(i%2))for(int j=0;j<=i;++j)cout<<(a[j]?"/\\":".."); else for(int j=0;j<=i;j+=2)cout<<(a[j]?"/__\\":"...."); cout<<endl; } return 0; }