一道简单题,可是,因为格式错误的原因,我居然花了半个小时的时间!
题目:
输入一个正整数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了的代码,主要区别是,前者是按行输出,后者是按列输出,这道题目,按列输出会更方便简单。
这是这次的做题心得。
原文地址:https://www.cnblogs.com/dearzy35/p/10051221.html
时间: 2024-11-03 01:36:52