pta 又来一个上三角数字三角形

Posted dearzy35

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pta 又来一个上三角数字三角形相关的知识,希望对你有一定的参考价值。

一道简单题,可是,因为格式错误的原因,我居然花了半个小时的时间!

题目:

输入一个正整数n,输出具有n层的上三角数字三角形。

输入格式:

只有一个正整数n,1<=n<=100。

输出格式:

一个上三角数字三角形,每个数字占四个字符位置。

输入样例:

5

输出样例:

   1   6  10  13  15

   2   7  11  14

   3   8  12

   4   9

   5

一开始我的代码是这个样子的:

#include <stdio.h>
int main()
{
int n,i,j,k=1,a[100][100]={0};
scanf("%d",&n);

for(i=0;i<n;i++)
{
int s=n;    
for(j=0;j<n-i;j++)
{
if(j==0)
{
a[i][0]=k;
k++;
}
if(j>0)
{
a[i][j]=a[i][j-1]+s+1;
}
s--;    
}

}
for(i=0;i<n;i++)
{
for(j=0;j<n-i;j++)
{
if(j==(n-i-1)){
printf("%d",a[i][j]);    
}
else
{
if(a[i][j]>9)
{
printf("%d  ",a[i][j]);    
}    
else if(a[i][j]>99)
{
printf("%d ",a[i][j]);    
}
else if(a[i][j]>999)
{
printf("%d",a[i][j]);    
}
else
{
printf("%d    ",a[i][j]);    
}
}
}

printf("\n");
}
 return 0;
}

通过仔细阅读题目可以知道,空格出现在数字之前,但是我初步做的是在数字之后,格式错误,而且这样分类容易少列举出现的情况,也会造成资源的浪费。

所以,改良了代码:

int main()
{
    int n,i,j,k=1,a[200][200]={0};
    scanf("%d",&n);

    for(i=0;i<n;i++)
    {
        int s=n;    
        for(j=0;j<n-i;j++)
        {
            if(j==0)
            {
                a[i][0]=k;
                k++;
            }
            if(j>0)
            {
                a[i][j]=a[i][j-1]+s+1;
            }
        s--;            
        }
        
        }
    for(i=0;i<n;i++)
    {
        for(j=0;j<n-i;j++)
        {
            printf("%4d",a[i][j]);        
            
            }
        printf("\n");
    }
     return 0;
}

题目上说的是“每个数字占四个字符位置”,所以可以直接这样输出:

 printf("%4d",a[i][j]);  

用了C++的方法做,进一步简化:

#include <iostream>
#include <cstdio>
using namespace std;

int a[105][105];

int main(){
    int n;
    scanf("%d", &n);
    int sum = 0;
    for (int i = 1 ; i <= n ; i++){
        for (int j = 1 ; j <= n + 1 - i ; j++){
            sum++;
            a[j][i] = sum; 
        }
    }
    
    for (int i = 1 ; i <= n ; i++){
        for (int j = 1 ; j <= n + 1 - i ; j++){
            printf("%4d",a[i][j]);
        }
        printf("\n");
    }
    return 0;
}

这两个AC了的代码,主要区别是,前者是按行输出,后者是按列输出,这道题目,按列输出会更方便简单。

这是这次的做题心得。

以上是关于pta 又来一个上三角数字三角形的主要内容,如果未能解决你的问题,请参考以下文章

[PTA]习题7-3 判断上三角矩阵

[PTA]习题7-3 判断上三角矩阵

[PTA]实验7-2-5 判断上三角矩阵

[PTA]实验7-2-6 打印杨辉三角

为啥保守光栅化无法为某些三角形调用片段着色器?

PTA4-4