精华内容
下载资源
问答
  • 我是一个初学者,菜鸟~杨辉三角怎么用数组写一个程序打出那个三角来?
  • 杨辉三角_c语言怎么编程,最好的C语言学习材料
  • 想问一下大家怎么用python实现杨辉三角啊,我目前只会输出这一个,接下来该怎么分析啊 <p style="text-align:center"><img alt="" height="394" src=...
  • 杨辉三角

    2015-04-04 13:00:00
    知道队列么,杨辉三角其实是可以队列来实现的,一个也好,两个也罢,当然你也可以N个,那就得看你是怎么想的了。一、使用一个队列打印杨辉三角 #include<iostream> #include<queue> using ...

      你还在申请一个大的数组来存放杨辉三角吗,你out啦;知道队列么,杨辉三角其实是可以用队列来实现的,一个也好,两个也罢,当然你也可以用N个,那就得看你是怎么想的了。

    一、使用一个队列打印杨辉三角

    #include<iostream>
    #include<queue>
    
    
    using namespace std;
    
    
    void print(int n)
    {
        queue<int> yang;
    
    
        int i = 1, j, s = 0;
        int k =0, t, u;
        yang.push(i),yang.push(i);
    
    
        cout<<yang.front();
        for( i = 1; i < n; i++)
        {
            cout<<endl;
            yang.push(k);
    
    
            for(j = 1; j <= i + 2; j++)
            {
                t = yang.front();
                yang.pop();
                u = s + t;
                yang.push(u);
                s = t;
                if(j != i + 2)
                    cout<<s<<' ';
            }
        }
    
    
    }
    int main()
    {
        for(int i = 1; i < 8; i++)
            {cout<<"Case:"<<i<<endl;print(i);cout<<endl;}
        return 0;
    }
    

      

    二、使用两个队列打印杨辉三角

    #include<iostream>
    #include<queue>
    
    
    using namespace std;
    
    
    void print(int n)
    {
        queue<int> yang1;
        queue<int> yang2;
    
    
        int change = 1;
        yang1.push(1);
        cout<<yang1.front();
    
    
        for(int i = 1; i < n; i++)
        {
            cout<<endl;
            int temp = 0;
            if(change)
            {
                yang1.push(1);
                while(!yang1.empty())
                {
                    cout<<yang1.front()<<' ';
                    yang2.push(temp+yang1.front());
                    temp = yang1.front();
                    yang1.pop();
                }
            }
            else
            {
                yang2.push(1);
                while(!yang2.empty())
                {
                    cout<<yang2.front()<<' ';
                    yang1.push(temp+yang2.front());
                    temp = yang2.front();
                    yang2.pop();
                }
            }
            change = !change;
        }
    
    
    }
    int main()
    {
        for(int i = 1; i < 8; i++)
            {cout<<"Case:"<<i<<endl;print(i);cout<<endl;}
        return 0;
    }
    

      

    三、N个队列?

    #include<iostream>
    using namespace std;
    int main()
    {
            cout<<"233333333..."<<endl;
            return 0;
    }
    

      

     

     




    转载于:https://www.cnblogs.com/yqbeyond/p/4392004.html

    展开全文
  • 队列实现杨辉三角

    千次阅读 2017-09-18 19:02:52
    那么怎么用队列去实现它呢? 首先可以想到,队首和队尾分别指向相邻的两行。每当队首出一个元素,就生成一个队尾的元素入队。 那么问题来了,杨辉三角的特性可以知道:第n行比第n-1行多一个元素,这就导致入队和出...

    如题,首先,可以从杨辉三角可以知道,它的每个数等于它上方两数之和、每行第一个数和最后一个数都是1。
    那么怎么用队列去实现它呢?
    首先可以想到,队首和队尾分别指向相邻的两行。每当队首出一个元素,就生成一个队尾的元素入队。
    那么问题来了,杨辉三角的特性可以知道:第n行比第n-1行多一个元素,这就导致入队和出队不匹配,每行入队的元素比出队的元素多一。
    解决方案是,对于每行,都先把0先入队当成这行的第一个元素。这样入队和出队就平衡了。
    具体实现思路:
    1. 首先让0和1入队成为第一行。
    2. 对于余下的每行,先让0入队
    3. 每次先出一个元素和队首元素相加,总和入队。

    具体的代码实现如下:

    #include <stdio.h>
    #define MAX 1000
    
    struct Queue{
        int sq[MAX];
        int Front;
        int Rear;
    }Queue;
    bool emty()
    {
        if (Queue.Front == Queue.Rear)
            return true;
        else
            return false;
    }
    int init_queue()
    {
        Queue.Front = 0;
        Queue.Rear = 0;
        return 0;
    }
    int in_queue(int val)
    {
        Queue.sq[Queue.Rear] = val;
        Queue.Rear++;
        return 0;
    }
    int out_queue()
    {
        if (emty())
            return -1;
        int v = Queue.sq[Queue.Front];
        Queue.Front++;
        return v;
    }
    int get_first()
    {
        return Queue.sq[Queue.Front];
    }
    int main()
    {
        int n;
        scanf("%d",&n);
    
        init_queue();
        in_queue(0);
        in_queue(1);
        printf("%d\n", 1);
    
        for (int i=1; i<=n; i++)
        {
            in_queue(0);
            for (int j=0; j<=i; j++)
            {
                int v = out_queue();
                v += get_first();
                in_queue(v);
                printf("%d ",v);
            }
            printf("\n");
        }
        return 0;
    }
    展开全文
  • Problem Description ...对应于每一个输入,请输出相应层数的杨辉三角,每一层的整数之间一个空格隔开,每一个杨辉三角后面加一个空行。 Sample Input 2 3 Sample Output 1 1 1 1 1 1 1 2 1
  • 怎么打印出如下杨辉三角形? 1 1 2 1 1 3 3 1 1 4 6 4 1
  • 手把手教你java打印杨辉三角

    杨辉三角介绍

    首先我们先看一下杨辉三角长什么样子

         [1],
        [1,1],
       [1,2,1],
      [1,3,3,1],
     [1,4,6,4,1]
     以此类推...
    

    分析

    不难发现,观察后可以得出以下结论:
    1.两边都是数字"1"
    2.从第三行开始,除了两边的数字"1"之外的数字都是由"肩膀上"的数字相加得到的。

    代码实现

    对于一些对算法不太熟悉的人,如果直接去打印,可能就比较困难,所以我们不妨拆开几步来做。

    第一步:打印一个数字都是"0"的三角形

    这是比较简单的,第一行是1个数字,第二行是2个数字,第三行是3个数字,以此类推,我们可以归纳得到这样一个规律:第n行有n个数字。于是很容易我们就可以写出以下代码:

    public class Main {
    
        public static void main(String[] args) throws Exception {
            List<List<Integer>> list = new Main().generate(5);
            System.out.println(list);
        }
        
        public List<List<Integer>> generate(int numRows) {
        if (numRows == 0) {
            return new ArrayList<>();
        }
        List<List<Integer>> linkedList = new LinkedList<>();
        //行数
        for (int i = 1; i <= numRows; i++) {
            List<Integer> list = new LinkedList<>();
            //列数
            for (int j = 0; j < i; j++) {
                list.add(0);
            }
            linkedList.add(list);
        }
        return linkedList;
    }
    

    调用main方法我们可以在控制台看到以下输出:

    [[0], [0, 0], [0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0, 0]]
    

    这里已经可以看出我们获得了一个都是"0"的三角形了!只是打印出来不好看,所以我们再写一个方法,遍历一下这个集合,打印得更好看一点。没什么技术含量,可以照抄,代码如下:

    public static void printGenerate(List<List<Integer>> list){
        for (int i = 0; i < list.size(); i++) {
            for (int j = 0; j < list.size() - i; j++) {
                //打印每一行前面的空格
                System.out.print(" ");
            }
            List<Integer> integers = list.get(i);
            for (Integer integer : integers) {
                //后面的数字,再加上一个空格
                System.out.print(integer + " ");
            }
            //换行
            System.out.println();
        }
    }
    

    然后运行一下,我们就可以看到一个很漂亮的三角形。但是这只是第一步。

         0 
        0 0 
       0 0 0 
      0 0 0 0 
     0 0 0 0 0 
    

    第二步:把边上的数字"0"换成数字"1"

    这个其实很简单,只需要把每一列的第一个和最后一个换成1,其他的不变即可。代码如下:

    public List<List<Integer>> generate(int numRows) {
        if (numRows == 0) {
            return new ArrayList<>();
        }
        List<List<Integer>> linkedList = new LinkedList<>();
        for (int i = 1; i <= numRows; i++) {
            List<Integer> list = new LinkedList<>();
            for (int j = 0; j < i; j++) {
                //判断每一列的第一个或者最后一个
                if(j == 0 || j == i-1){
                    //数字为1
                    list.add(1);
                }else {
                    //其他列保持不变,还是0
                    list.add(0);
                }
            }
            linkedList.add(list);
        }
        return linkedList;
    }
    

    于是我们就可以打印出这样子的三角形:

         1 
        1 1 
       1 0 1 
      1 0 0 1 
     1 0 0 0 1
    

    第三步:中间为"0"的数字都改成用"肩膀上"的数字相加的结果

    分析发现:

         [1],10        <--对应的索引值
        [1,1],20 1
       [1,2,1],30 1 2
      [1,3,3,1],40 1 2 3
     [1,4,6,4,1]50 1 2 3 4
    

    第三行的"2"是当前集合索引是[1]的值,是由第二行(上一个集合)索引是[0]的值"1"索引是[1]的值"1"相加得到的。
    第四行的第1个"3"是当前集合索引是[1]的值,是由第三行(上一个集合)索引是[0]的值"1"和索引是[1]的值"2"相加得到的。第2个"3"是当前集合索引是[2]的值,是由第三行(上一个集合)索引是[1]的值和索引是[2]的值相加得到的。
    以此类推,我们可以得到这样一个结论:
    除了首位和末尾的值以外,第n行的索引值为[ j ]的值是由第n-1行的索引值为[ j-1 ]和[ j ]相加得到。

    所以我们可以判断从第3行开始,获取上一行的集合,然后除了首位和末尾的数值外(在第二步已经做了处理了),其他的数值都是上一行索引值为[ j-1 ]和[ j ]的值相加而成的。

    public List<List<Integer>> generate(int numRows) {
        if (numRows == 0) {
            return new ArrayList<>();
        }
        List<List<Integer>> linkedList = new LinkedList<>();
        List<Integer> preList = null;
        for (int i = 1; i <= numRows; i++) {
            List<Integer> list = new LinkedList<>();
            if (i >= 3) {
                //大于或等于三行则获取上一行的集合
                preList = linkedList.get(i - 2);
            }
            for (int j = 0; j < i; j++) {
                if (j == 0 || j == i - 1)
                	//首位和末尾的数值都是1
                    list.add(1);
                else {
                	//非首位,非末尾的情况
                    if (preList != null) {
                        //数值是由上一行索引值为[j-1]和索引值为[j]相加得到的
                        list.add(preList.get(j - 1) + preList.get(j));
                    }
                }
            }
            linkedList.add(list);
        }
        return linkedList;
    }
    

    于是就写完了,我们可以打印出来看看结果:

              1 
             1 1 
            1 2 1 
           1 3 3 1 
          1 4 6 4 1 
    

    如果输入的行数比较多,数字打印出来不对称,比如以下这样:

              1 
             1 1 
            1 2 1 
           1 3 3 1 
          1 4 6 4 1 
         1 5 10 10 5 1 
        1 6 15 20 15 6 1 
       1 7 21 35 35 21 7 1 
      1 8 28 56 70 56 28 8 1 
     1 9 36 84 126 126 84 36 9 1 
    

    我们可以调整一下,以下就不去做打印的优化了,大家可以在评论里讨论,补上。
    我还写了很多关于java技术的分享,有兴趣可以关注一下公众号,互相交流一下。
    微信公众号二维码

    展开全文
  • 求代码,刚学JAVAECLIPSE
  • javascript中怎么实现打印一个杨辉三角形的前5行?循环嵌套的写法怎么写呢?
  • 1.一维数组输出等腰三角形的杨辉三角 2.心得与总结 (1)刚开始时直接不会写程序经过自己网上查找资料后终于理解了一点但还是不怎么会希望在以后的学习中自己能进步 (2)学习这门课程就要多练希望自己不那么...

    1.用一维数组输出等腰三角形的杨辉三角

    2.心得与总结

    (1)刚开始时直接不会写程序经过自己网上查找资料后终于理解了一点但还是不怎么会希望在以后的学习中自己能进步

    (2)学习这门课程就要多练希望自己不那么懒惰经常练习

     

    转载于:https://www.cnblogs.com/Morbid/p/10633436.html

    展开全文
  • //声明博主是菜鸟入门学Java,怕忘记杨辉三角怎么写。 package 杨辉三角; import java.util.Scanner; public class yanghui{ public static void main(String[] args) { //首先是输入要输入的行数的值。 Scanner ...
  • LeetCode119-杨辉三角II

    2020-02-11 17:07:27
    很容易想到的一个思路就是,求出前K-1行,再用杨辉三角的定义求出第K行。其实这个方法不是特别高效,我们来看看组合数学是怎么求的。 我们可以知道,这些数字,其实都可以组合数表示出来。 既然可以数学公式...
  • 如果你学过杨辉三角的话,我们知道,这个2是由它头上的那一行第一个元素和第二个元素的和,我们带着这个想法来看看第四行,第五行,是不是都是一样的,至于最后一列是1,是因为它头上只有1 好了,我们开始写代码 1....
  • 杨辉三角形大家都知道,那么在这里就不再介绍了,大家肯定都C/C++实现过杨辉三角形,是把数据存放在了一个二维数组里,那么如何让Python来实现杨辉三角形呢? 我查看了网上的很多方法,都很麻烦,有的还用到了...
  • 要输出杨辉三角形肯定要明白怎么定义和赋值,要定义和赋值肯定要先找到其中的规律。 主要发现三个规律: ①杨辉三角形可以数组表示,发现第一行只有一列,第二行有两列,第三行有三列,类推第十行有十列。可以a...
  • 思维导图 前言 在很多时候,我们都可以在...怎么查看进程,ps命令一般在什么情况下使用。 什么是幂等操作?怎么解决幂等操作 乐观锁和分布式锁是什么,分别对应的场景是什么? 了解Web层开发?数据库索引了解么?聚簇
  • java ArrayLIsts实现下面的形式,题目是在leetcode上看到的,  1  1 1 ...具体看看代码怎么实现把: package excise; import java.util.List; import java.util.ArrayList; import java.util.
  • import java.util.*; public class YanghuiSanjiao { public static void main(String []args){ System.out.println("请输入行数:"); Scanner sc=new Scanner(System.in);...1 6 15 20 15 6 1
  • 杨辉三角形因为其形式简单,又有一定的使用价值,因此是入门编程题中被用的最多的,也是很好的语言实例标的。 下面就杨辉三角形使用python的三种...这个解法显然也没怎么用python的语言特征,换成其他语言几乎可...
  • 作为一名应届毕业生,算法不是那么的...作为一名半个数学系的人我怎么可以忍受得了这个限制,然后我发现杨辉三角第n行第m列的值无C(n-1,m-1),那为何不用这个公式求解。这个公式那就要牵扯到阶乘的问题,但是吧...
  • 上一期我们分享了LeetCode算法题目中的股票交易合集,今天我们来讲解一下LeetCode中的一个特例——杨辉三角问题合集。更多题解合集持续关注我,编程能力的提高,需要算法题的刷题数量来喂出来的,下面我们直接进入...
  • 类似于杨辉三角或者是ABCDEF环绕成正方形打印我想看能不能二维数组控制他们循环打印 数字我二维数组能控制循环,但不知怎么在二维数组里储存字符串,是数组指针吗?大神们能给个杨辉三角但是数学换成字符串的...
  • 良辰最喜欢对那些自认能力出众的人出手(感谢cqupt.. 发布时间: 2015年11月8日 22:31 最后更新: 2015年11月8日 22:35 时间限制: 1000ms 内存限制: 128M描述 ...我们一个矩阵来表示 Pascal 三角形0: C(0,
  • 求救

    2007-12-28 13:18:00
    有哪位仁兄知道"杨辉三角"c语言怎么编写出来。谢谢!
  • 第四周笔记

    2019-04-15 21:03:11
    杨辉三角求第m行第k个元素的时候,组合数公式就可以直接求,在利用阶乘的时候注意,只需一个循环求最大的数的阶乘,就可以在中间求得小数的阶乘,而且要注意当两个小数相等的时候. 数字统计法 利用列表的时候,问题1,当...
  • NOIP2011复赛DAY2

    2016-11-12 12:56:56
    NOIP2011——DAY2 ...相信只要略微有一点数学底子的同学知道,这其实就是杨辉三角,对一个ioer来说也就是组合数,dp的思想就可以解决了。(不知道杨辉三角的,你dp怎么学的…) #define M 100
  • NOIP2011计算系数

    2016-11-14 18:20:41
    计算系数【题目分析】 ...相信只要略微有一点数学底子的同学知道,这其实就是杨辉三角(或组合数),对一个oierdp的思想就可以解决了。(不知道杨辉三角的,你dp怎么学的…)【代码】#define M 1005 #include<cstdio>
  • 问题1:在递推的方法用杨辉三角计算中,我创建了二维数组,但二维数组的行和列数并不是m,而是m+1,因为杨辉三角的第一行只有一个1. 问题2:在递推方法中,并不需要考虑期间发生了什么,就是具体的步骤过程,这些...

空空如也

空空如也

1 2 3
收藏数 52
精华内容 20
关键字:

杨辉三角怎么用