算法初级1:输出数字塔

需求:

  输入一个1-9的整数n,输出n行由数字组成的数字塔。

  1

222

33333

如上图所示。

解决方法:

public class 数字塔 {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int n = input.nextInt();
        cal(n);
    }
    private static void cal(int n){
        //外层for循环控制输出的层数,内层for循环控制每层的个数
        for(int i=1;i<=n;i++){
            //控制输出的空格
            for(int k=n;k>i;k--){
                System.out.print(" ");
            }
            //控制输出的数字
            for(int j=0;j<i*2-1;j++){
                System.out.print(i);
            }
            System.out.println();
        }

    }
}

这里我先说一下我的思路:
  1.首先需要知道输出几行,输入为 n,就输出 n 行

  2.找出每一行有什么特点,这里每一行都是数字,并且从上到下为1-9的顺序,并且下一行都比上一行要多两个。

  将上面两步分析清楚后,应该能够得到这样的结果

  虽然都打印出来了,但是格式并不正确。

  3.我们可以看出,如果要形成金字塔形,则第一行需要在输出数字之前输出2个空格,第二行需要输出1个空格,那么这个空格数和输入的n有什么关系了?

  4.当有三行的时候,第一行需要输出2个空格,第二行需要输出一个空格,第三行不输出空格。那么用一个for循环来控制输出空格的个数就可以了。

时间: 2024-08-07 13:22:59

算法初级1:输出数字塔的相关文章

算法&lt;初级&gt; - 第五章 递归与动规相关问题(完结)

算法<初级> - 第五章 递归与动规相关问题(完结) <一>递归和动态规划 暴力递归 转化为规模缩小了的同问题的子问题 - 时间复杂度O(2n-1) 有明确的边界条件(base case) - 先写base case,再写问题递归的过程 有得到子问题结果后决策过程 不记录每个子问题的解 - 每次求解子问题都交给递归去解决,不会在全局保存子问题的解(与动规形成对比) 动态规划DP 从暴力递归中延申 - 过程中还经历过<记忆化搜索>,相当于暴力递归+cache缓存(用has

LeetCode:Integer to English Words - 按英语读法输出数字对应单词

1.题目名称 Integer to English Words(按英语读法输出数字对应单词) 2.题目地址 https://leetcode.com/problems/integer-to-english-words/ 3.题目内容 英文:Convert a non-negative integer to its english words representation. Given input is guaranteed to be less than 231 - 1. 中文:给出一个非负整数

java多线程编程(2)交替输出数字和字母

mark一下,不停的看看notify和wait的没有理解 class Printer { int index=0; //输出奇数 public synchronized void printA(int a) { while(index%2==0) { try { this.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } index++; S

Python输出数字金字塔

使用Python输出一个数字金字塔 运行结果: 源代码: ''' Python输出数字金字塔 ''' for x in range(1,10): print(' '*(15-x),end='') n=x while n>=1: print(n,sep='',end='') n-=1 n+=2 while n<=x: print(n,sep='',end='') n+=1 print() 原文地址:https://www.cnblogs.com/yijiahao/p/11740372.html

go练习:交叉输出数字和字母

问题:请使用两个线程,一个输出字母,一个输出数字,交替输出1A2B3C....26Z java的实现 我们来练习使用go实现 package main import ( "fmt" ) func main() { var h = 65 var c, d, e = make(chan int), make(chan int), make(chan int) go func() { for i := 0; i < 26; i++ { <-c fmt.Print(i+1, &qu

算法初级面试题08——递归和动态规划的精髓、阶乘、汉诺塔、子序列和全排列、母牛问题、逆序栈、最小的路径和、数组累加成指定整数、背包问题

第八课主要介绍递归和动态规划 介绍递归和动态规划 暴力递归: 1,把问题转化为规模缩小了的同类问题的子问题 2,有明确的不需要继续进行递归的条件(base case) 3,有当得到了子问题的结果之后的决策过程 4,不记录每一个子问题的解 动态规划 1,从暴力递归中来 2,将每一个子问题的解记录下来,避免重复计算 3,把暴力递归的过程,抽象成了状态表达 4,并且存在化简状态表达,使其更加简洁的可能 图灵引入的是:我不知道怎么算,但是我知道怎么试.知道怎么暴力破解出来. 要学会,练习懂得怎么尝试.

[转]as3 算法实例【输出1 到最大的N 位数 题目:输入数字n,按顺序输出从1 最大的n 位10 进制数。比如输入3,则输出1、2、3 一直到最大的3 位数即999。】

思路:如果我们在数字前面补0的话,就会发现n位所有10进制数其实就是n个从0到9的全排列.也就是说,我们把数字的每一位都从0到9排列一遍,就得到了所有的10进制数. 1 /** 2 *ch 存放数字 3 *n n位数 4 *index 计数值 5 **/ 6 private function num(ch:Array,n:int,index:int):void 7 { 8 if(index==n) 9 { 10 trace(ch); 11 return; 12 } 13 for(var i:in

KNN分类算法实现手写数字识别

需求: 利用一个手写数字"先验数据"集,使用knn算法来实现对手写数字的自动识别: 先验数据(训练数据)集: ?数据维度比较大,样本数比较多. ? 数据集包括数字0-9的手写体. ?每个数字大约有200个样本. ?每个样本保持在一个txt文件中. ?手写体图像本身的大小是32x32的二值图,转换到txt文件保存后,内容也是32x32个数字,0或者1,如下: 数据集压缩包解压后有两个目录:(将这两个目录文件夹拷贝的项目路径下E:/KNNCase/digits/) ?目录trainingD

C#中调用Matlab人工神经网络算法实现手写数字识别

手写数字识别实现 设计技术参数:通过由数字构成的图像,自动实现几个不同数字的识别,设计识别方法,有较高的识别率 关键字:二值化  投影  矩阵  目标定位  Matlab 手写数字图像识别简介: 手写阿拉伯数字识别是图像内容识别中较为简单的一个应用领域,原因有被识别的模式数较少(只有0到9,10个阿拉伯数字).阿拉伯数字笔画少并且简单等.手写阿拉伯数字的识别采用的方法相对于人脸识别.汉字识别等应用领域来说可以采用更为灵活的方法,例如基于规则的方法.基于有限状态自动机的方法.基于统计的方法和基于神