| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 841 人关注过本帖, 1 人收藏
标题:奇葩的杨辉三角
取消只看楼主 加入收藏
cherryljr
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2012-10-25
结帖率:100%
收藏(1)
 问题点数:0 回复次数:4 
奇葩的杨辉三角
杨辉三角想必大家都会了,可我最近看到一题需要把杨辉三角倒过来变成一个正方形的题目啊。不是为了求答案是真心没什么思路的啊。求大家指点一下啊。
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1(左下半部分)
1 4 6 4 1
  1 3 3 1
    1 2 1
      1 1
        1 (右上半部分)
然后把下面的倒上去啊:
1 4 6 4 1
1 1 3 3 1
1 2 1 2 1
1 3 3 1 1
1 4 6 4 1
(当然不要出现用一个printf直接解决的,要求输入行数的,求思路啊!)
搜索更多相关主题的帖子: 杨辉三角 正方形 
2013-01-01 12:18
cherryljr
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2012-10-25
收藏
得分:0 
上课来晚了……可是用数组这样的话怎么手动输入行数啊?
我之前是用for循环实现手动输入的。可数组我真心不会了……
不过思路多谢哈,忘记还可以反序输出哈
2013-01-07 14:45
cherryljr
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2012-10-25
收藏
得分:0 
多谢,我懂了!再次感谢两位大神相助
2013-01-07 16:55
cherryljr
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2012-10-25
收藏
得分:0 
回复 2楼 额外覆盖
#include <stdio.h>
int main(void)
{
     int n;
     int y[9][9];
     int i,j;
     scanf("%d",&n);
     for(i=0;i<n;i++)
         for(j=0;j<n;j++)
         {
             y[i][j]=0;
         }
         y[0][0]=1;
     for(i=1;i<n;i++)
         for(j=0;j<n;j++)
         {
             if(j==0||j==i) y[i][j]=1; else  
             y[i][j]=y[i-1][j-1]+y[i-1][j];
         }
     for(i=0;i<n;i++)
     {
         for(j=0;j<n;j++)
         {
             if(y[i][j]>0)
             {
                 printf("%4.0d",y[i][j]);
             }
         }
         for(j=0;j<n;j++)
         {
             if(y[n-1-i][n-1-j]>1||n-1-j==0&&n-1-i!=0)
             {
                 printf("%4.0d",y[n-1-i][n-1-j]);
             }
         }
         printf("\n");
     }
     return 0;
}
我稍稍改了点,可是发现就出问题了,看样子是没有初始化的问题,可是是为什么呢?y[0][0]的值应该可以在下面for(i=0;i<n;i++)这边赋值啊。怎么不可以呢?
这是我改后的:
#include <stdio.h>
int main(void)
{
     int n;
     int y[9][9];
     int i,j;
     scanf("%d",&n);
     for(i=0;i<n;i++)
         for(j=0;j<n;j++)
         {
             y[i][j]=0;
         }
        
     for(i=0;i<n;i++)
         for(j=0;j<n;j++)
         {
             if(j==0||j==i) y[i][j]=1; else  
             y[i][j]=y[i-1][j-1]+y[i-1][j];
         }
     for(i=0;i<n;i++)
     {
         for(j=0;j<n;j++)
         {
             if(y[i][j]>0)
             {
                 printf("%4.0d",y[i][j]);
             }
         }
         for(j=0;j<n;j++)
         {
             if(y[n-1-i][n-1-j]>1||n-1-j==0&&n-1-i!=0)
             {
                 printf("%4.0d",y[n-1-i][n-1-j]);
             }
         }
         printf("\n");
     }
     return 0;
}
2013-01-07 18:24
cherryljr
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2012-10-25
收藏
得分:0 
回复 10楼 额外覆盖
当i=0时,i和j不是相等的吗?那应该是执行if之后的语句,所以应该没有问题吧?
我也找出问题了哈,是在赋值的时候哈。所以我想借用你的思路直接用逆序输出的办法了。所以前面我就完全按照杨辉三角的办法,而不对整个数组进行初始化。
也就是:
for(i=0;i<n;i++)
         for(j=0;j<=i;j++)
         {
             if(j==0||j==i) y[i][j]=1; else  
             y[i][j]=y[i-1][j-1]+y[i-1][j];
         }
这样就不会出问题了,然后输出时:
 for(i=0;i<n;i++)
     {
         for(j=0;j<=i;j++)
         {
                 printf("%4.0d",y[i][j]);   
         }
         for(j=0;j<n;j++)
         {
             if(y[n-1-i][n-1-j]>1||n-1-j==0&&n-1-i!=0)
             {
                 printf("%4.0d",y[n-1-i][n-1-j]);
             }
         }
         printf("\n");
这样就行了哈。十分感谢你的回答哈。
不过你最后的那个if判读我不太懂啊(逆序的)能解释一下吗?
y[n-1-i][n-1-j]>1||n-1-j==0&&n-1-i!=0
这个到底判断顺序是怎么样的啊?
是y[n-1-i][n-1-j]>1或n-1-j==0符合其中一个然后都符合n-1-i!=0
还是符合y[n-1-i][n-1-j]>1或是n-1-j==0&&n-1-i!=0
就是逆序输出这个小弟还有点不懂,望指教哈(*^__^*) ……
2013-01-09 14:01
快速回复:奇葩的杨辉三角
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.032492 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved