列表

详情


NC214626. 输出图形

描述

打工人王某总是反复的做着老板布置下来的事情,但是又不得不做,因为干饭需要money。这日,老板布置了一个挖地任务,即给出一个n×n的正方形土地,你需要根据n的奇偶性对土地进行操作,若n为偶数,则以该正方形底边的左部分作为等腰三角形的腰(腰为n-1),并画出该三角形然后将其挖空。若为奇数,则以该正方形底边的右部分作为等腰三角形的腰(腰为n-1)并画出该三角形然后将其挖空。老板还有一个特殊要求,若给出的n是5的倍数,在完成上述操作后还需将前四行全部挖空,简单来说就是根据奇偶数操作完后直接舍弃前四行,输出其他行即可。
操作如下图所示:


输入描述

第一行一个正整数T表示测试数据组数(1≤T≤103)。

接下来T行,每行一个整数n,代表正方形的边长(3<=n<=1000)。

输出描述

输出操作完后图形,每个图形之间相隔一行。

示例1

输入:

2
4
3

输出:

****
** *
*  *
   *

***
* *
*

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C 解法, 执行用时: 10ms, 内存消耗: 2700K, 提交时间: 2021-11-08 22:58:55

#include<stdio.h>
#define MAXN 1001
int main()
{
	int t;
	char a[MAXN][MAXN];
	scanf("%d",&t);
    while(t--)
	{
		int n,k,l,i;
		scanf("%d",&n);
		for(k=1;k<=n;k++)
		for(l=1;l<=n;l++)
		a[k][l]='*';
		
		int p=1;
		if(n%5==0)
		p=5;
		
		if(n%2==0)
		{
		for(k=n;k>1;--k)
		for(l=n-k+1;l<=n-1;++l)
		a[k][l]=' ';
	    }
	    
	    else
		{
		for(k=2;k<=n;++k)
		for(l=2;l<=k;++l)
		a[k][l]=' ';
	    }
	    
		for(;p<=n;p++)
		{
			for(i=1;i<=n;i++)
			putchar(a[p][i]);
			putchar('\n');
		}
		
		putchar('\n');
	}
	return 0;
}

C++(clang++11) 解法, 执行用时: 42ms, 内存消耗: 1912K, 提交时间: 2021-03-14 10:50:01

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main() {
int x;
int n;
 int T;
 cin>>T;
 while(T--){
cin>>n;
if(n%5==0) {
x=4;
}else{
x=0;
}
if (n%2==0) {
for (int i=x;i<n;i++) {
for (int j=i;j<n-1;j++) {
cout<<"*";
}
for (int j=0;j<i;j++) {
cout<<" ";
}
cout<<"*"<<endl;
}
} else {
for (int i=x;i<n;i++) {
cout<<"*";
for (int j=0;j<i;j++) {
cout<<" ";
}
for (int j=i;j<n-1;j++) {
cout << "*";
}
cout<<endl;
} }
cout<<endl;
} }

上一题