欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

XTU OJ 1397 Patchouli的金字塔

发布时间:2024/3/12 编程问答 45 豆豆
生活随笔 收集整理的这篇文章主要介绍了 XTU OJ 1397 Patchouli的金字塔 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

题目描述

Patchouli想要绘制一个金字塔。金字塔的图案由n个正三角形和倒三角形堆叠而成,具体的绘制方法如下:

  • 每个三角形由*,/,\和-组成,分别代表三角形的顶点和三条边。

  • 第一行只包含一个正三角形,其余各行的三角形按照”正三角形,倒三角形,正三角形,倒三角形,…… “的顺序紧致排列。

  • 除最后一行外,每一行的三角形比上一行多2个。一共输出n个三角形。

例如,n=1时,图案如下:

*/ \ * - *

n=2时,图案如下:

*/ \* - */ \ * - *

n=3时,图案如下:

*/ \* - */ \ / * - *

n=7时,图案如下:

*/ \* - */ \ / \* - * - */ \ / \ * - * - *

Patchouli想知道n个三角形组成的金字塔的图案是怎样的?

输入

第一行包含一个正整数T(1≤T≤100),表示样例的个数。 接下来的T行,每行包含一个正整数n(1≤n≤100),表示金字塔中的三角形的个数。

输出

对于每个样例输出对应的图案。每行的行末不包含多余的空格。

样例输入

4 1 2 3 4

样例输出

*/ \ * - **/ \* - */ \ * - **/ \* - */ \ / * - **/ \* - */ \ / \ * - * - *

此类题型都是属于比较耗时间的题目,需要慢慢修正代码,我的代码比较长和简陋,只能提供一些思路

本题我的思路是分奇和偶行输出,最后一行的三角形要单独输出,(其实也可以不,只是我太菜了,试了好几遍也没有成功(狗头),于是就单独拿出来输出了),

#include<stdio.h> int main() {int k;scanf("%d",&k);while(k--){int n,a=1,i,j,cnt=0,p=0;//计数scanf("%d",&n);while(a*a<n)//确定边长{a++;}for(i=0;i<2*a-1;i++){for(j=0;j<2*a-i;j++)//空格输出{printf(" ");}if(i%2==1)//偶数行,有三种输出,/,\和空格,这该如何输出???{printf("/");for(j=0;j<2*i;j++){if(j%4==1){printf("\\");cnt++;}else if(j%4==3){printf("/");cnt++;}else printf(" ");}}else//奇数行{if(i==2*a){for(j=0;j<p;j++){if(j%4==0) printf("*");else if(j%4==2) printf("-");else printf(" ");}continue;}for(j=0;j<2*i+1;j++){if(j%4==0) printf("*");else if(j%4==2) printf("-");else printf(" ");}}printf("\n"); // if(cnt==n) break;}printf(" ");int num;num=n-cnt; //在最后一行需要打印的三角形个数if(num%2!=0) //最后一行为奇数个三角{for(j=1;j<=(num+1)/2;j++){printf("/ \\");if(j!=(num+1)/2)printf(" ");}}else //最后一行为偶数个三角{printf("/ ");for(j=1;j<=num/2;j++){ printf("\\ /");if(j!=num/2) printf(" ");}}printf("\n");for(j=1;j<=(num+1)/2;j++){printf("* -");if(j!=(num+1)/2)printf(" ");}printf(" *");printf("\n");} }

欢迎大佬指正!!!

总结

以上是生活随笔为你收集整理的XTU OJ 1397 Patchouli的金字塔的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。