列表

详情


NC200317. Triangle

描述

Alice喜欢神秘的事物,比如魔法阵,她希望你来帮她绘制魔法阵,这个魔法阵大体上是一个三角形,详细见下图。

将三个n-1级的魔法阵放置在三个角上就可以得到n级魔法阵。因为某些原因,你需要保证每行最后一个\符号的左边除了/和\符号外,其它全部是.符号。

输入描述

第一行输入一个正整数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;
}

上一题