打印图形(1)(C+Java)

要求编写算法输出下列图形:

 1
 5   2
 8   6   3
10   9   7   4   
…………………………………………………………

有两个方法来进行表示,但是原理是一样的
在这里插入图片描述
由上面图形可知,左下角的数是图形中最大的数且数值为主对角线(即每行的最右边的数)之和
方法一:
由求和公式得出Kmax=m(m+1)/2

#include<stdio.h>
#define N 100
int main(){
    int m;
    int cnt=0;
    scanf("%d",&m);//打印出一个m*m的矩阵
    int str[N][N]={0};//创建一个N*N的二维数组并将初值赋0
    //该循环将二维数组填写好
    for(int i=0,j=0,k=1;k<=m*(m+1)/2;k++){
        str[i++][j++]=k;//把二维数组最外层的1~m填满
        if(i>=m){//排完最外层以后列数归零,开始计算第二层~第m层
            i=++cnt;
            j=0;
        }
    }
    //遍历二维数组,将各个数值打印出来
    for(int i=0;i<m;i++){
        for(int j=0;j<m;j++){
            if(str[i][j]){//当数值非0时打印
                printf("%-5d ",str[i][j]);//我定义的是左对齐,如果题目中有规定请修改此信息
            }
            else
            {//当数值为0时换行
                printf("\n");
                break;
            }
        }
    }
}

方法二:

#include<stdio.h>
#define N 100
int main(){
    int m;
    int n=1;
    scanf("%d",&m);//打印出一个m*m的矩阵
    int str[N][N]={0};//创建一个N*N的二维数组并将初值赋0
    //该循环将二维数组填写好
    for(int i=0;i<m;i++){//从最外层开始将二维数组对角线式填满
        for(int j=0;j<m-i;j++){//每内循环一次,要赋值的最外层单位数就会减一
            str[i+j][j]=n++;
        }
    }
    //遍历二维数组,将各个数值打印出来
    for(int i=0;i<m;i++){
        for(int j=0;j<=i;j++){
            printf("%-5d",str[i][j]);//当数值非0时打印
        }
        printf("\n");//从上到下每打印一行的数据,就换行
    }
}

由于最近在苦练Java,就再用Java敲一遍(卑微)

注释请参见上面C的代码,算法是一样的

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		int m = Integer.parseInt(bf.readLine());
		int n = 1;
		int[][] str = new int[100][100];
		for (int i = 0; i < m; i++) {
			for (int j = 0; j < m - i; j++) {
				str[i + j][j] = n++;
			}
		}
		for (int i = 0; i < m; i++) {
			for (int j = 0; j <= i; j++) {
				System.out.printf("%-5d", str[i][j]);
			}
			System.out.println();
		}
	}

}
发布了21 篇原创文章 · 获赞 0 · 访问量 209

猜你喜欢

转载自blog.csdn.net/qq_43511405/article/details/104844947