本题要求编写程序,倒序输出 n行 由 指定数字开始构成的 左上三角形数字阵列。
输入格式:
输入在一行中给出一个正整数n(1≤n<7)和一个正整数m。
输出格式:
倒序输出n行由m开始构成的左上三角形阵列。格式见输出样例,其中每个数字后面都有一个空格。
输入样例:
3 9
输出样例:
9 8 7
6 5
4
解析答案:
方法一:
#include <stdio.h>
int main(void)
{
int n, m, i, j, y;
scanf("%d %d", &n, &m);
y=n;//等腰直角三角形中行列相等
for(i=0;i<n;i++,y--)
{
for(j=0;j<y;j++)//此时y为了改变列的循环条件
{
printf("%d ",m--);
}
printf("\n");
}
}
题目目的是为了倒序输出n行由m开始构成的左上三角形阵列。
我们注意题目中for循环中需要输出n行,而列则会随着行数的变化而变化,另外输出的数字也会逐次减一。所以在for循环嵌套的过程中,令y赋值为n的值,外层的for循环每执行完一轮,均令y--,最后只在printf块中m--即刻满足要求。
方法二:
#include <stdio.h>
int main(){
int m,n,i,j,x,y,z;
scanf("%d %d",&n,&m);
x=m+n+1; //输出中的-1行首列数字("无效"的输出)
y=n+1; //算上无效的-1行,一共是n+1行
z=m+1; //输出中的-1行末列数字("无效"的输出)
for(i=1;i<=n;i++)
{
x=x-(y--); //输出的首行数字
z=z-y; //改变每一行的相应列数的循环条件
for(j=x;j>=z;j--){
printf("%d ",j);
}
printf("\n");
}
}
在我初次做这题的时候,我使用的是第二种办法。
当第二次再做题的时候,使用的第一种办法。
以下是以输出示例为参照,解释-1行的意思。
(13 12 11 10) //所说的-1行是这一部分,只作参照但不参与输出
9 8 7
6 5
4