| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1112 人关注过本帖, 1 人收藏
标题:输出二维斜矩阵,高手请围观
只看楼主 加入收藏
hjywyj
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:1114
专家分:2611
注 册:2010-4-14
结帖率:90.91%
收藏(1)
已结贴  问题点数:20 回复次数:16 
输出二维斜矩阵,高手请围观
输入n,输出n*n的二维斜矩阵。
例如,输入5
输出:
1     2     4      7    11
3     5     8      12   16
6     9     13     17   20
10   14     18     21   23
15   19     22     24   25
搜索更多相关主题的帖子: 矩阵 2010 
2011-08-26 07:24
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
收藏
得分:0 
这个矩阵的定义是什么,数据之间的联系?就像魔方矩阵也有他自身的定义。不然算法不好表达。

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2011-08-26 07:38
hjywyj
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:1114
专家分:2611
注 册:2010-4-14
收藏
得分:0 
没看出来么?
1    2    4      7    11
3     5     8      12   16
6     9     13     17   20
10   14     18     21   23
15   19     22     24   25
2011-08-26 07:45
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
收藏
得分:2 
或许可以这么处理,递增的下标依次为:[0,0]--[0,1][1,0]--[0,2][1,1][2,0]--[0,3][1,2][2,1][3,0],。。。以下标和递增为一个循环,第二层循环为行递增,然后依次赋值。

#include <stdio.h>
#define N 5
int main(void)
{
    int i,j,k,m=1;
    int a[N][N]={0};
    for(k=0;k<N;k++)
    {
        for(i=0;i<=k;i++)
        {
            j=k-i;
            a[i][j]=m++;
        }
    }
    m=(N+1)*N/2+1;
    for(k=N;k<2*N-1;k++)
    {
        for(i=k-N+1;i<N;i++)
        {
            j=k-i;
            a[i][j]=m++;
        }
    }
    printf("For %d*%d,The Matrix is:\n",N,N);
    k=0;
    for(i=0;i<N;i++)
        for(j=0;j<N;j++)
        {
            printf("%5d",a[i][j]);
            k++;
            if(k%N==0) printf("\n");
        }
    return 0;
}


gcc编译后输出的结果为:
For 5*5,The Matrix is:
    1    2    4    7   11
    3    5    8   12   16
    6    9   13   17   20
   10   14   18   21   23
   15   19   22   24   25


[ 本帖最后由 pauljames 于 2011-8-26 21:45 编辑 ]

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2011-08-26 08:03
edwardflee
Rank: 4
等 级:业余侠客
帖 子:145
专家分:234
注 册:2011-7-27
收藏
得分:2 
程序代码:
# include <stdio.h>

int main (void)
{
    int n;
    int i,j,k;
    int m=0;
    int x,y;
    int a[100][100];
   
    printf("输入斜矩阵的阶数  ");
    scanf("%d",&n);
   
    for (i=0; i<=2*(n-1); ++i)
    {
        if (i < n)
        {
            x = 0;
            y = i;
        }
        else
        {
            x = i - (n-1);
            y = n-1;
        }
       
        for (j=x; j<=y; ++j)
        {
            k = i-j;
            m++;
            a[j][k] = m;
        }
    }
       
        for (j=0; j<n; ++j)
        {
            for (k=0; k<n; ++k)
                printf("%-5d",a[j][k]);
            printf("\n");
        }
       
        return 0;
    }
/*在VC++6.0中的输出结果为:
————————————
输入斜矩阵的阶数  5
1    2    4    7    11
3    5    8    12   16
6    9    13   17   20
10   14   18   21   23
15   19   22   24   25
Press any key to continue
————————————
*/

学C的秘诀=每天都来泡论坛
2011-08-26 09:36
ppfly
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:297
专家分:1956
注 册:2009-5-17
收藏
得分:5 
程序代码:
#include<stdio.h>
int array[1000][1000];
int main()
{
    int n,i,j,x,y,rst;
    scanf("%d",&n);
    rst=i=j=0;
    while(rst<n*n)
    {
        x=i;y=j;
        while(x<n && y>=0)array[x++][y--]=++rst;
        j+1<n ? j++ : i++;
    }
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
            printf(i==0?"%3d":" %3d",array[i][j]);
        printf("\n");
    }
    return 0;
}

********多贴代码,少说空话*******
2011-08-26 14:37
饭桶
Rank: 6Rank: 6
等 级:侠之大者
帖 子:165
专家分:422
注 册:2011-4-5
收藏
得分:3 
程序代码:
#include<stdio.h>
main()
{int j,k,l,i,n,a[20][20];

 printf("请输入n:");

 scanf("%d",&n);

 i=1;

 for(j=0;j<n;j++)
    for(k=j,l=0;k>=0&&l<n;k--,l++)
       a[l][k]=i++;

 for(j=1;j<n;j++)
    for(k=j,l=n-1;k<n;k++,l--)
       a[k][l]=i++;

 putchar('\n');

 for(j=0;j<n;j++)
    {for(k=0;k<n;k++)
        printf("%4d ",a[j][k]);
     printf("\n");
    }

}

输出如下:
请输入n:5

   1    2    4    7   11
   3    5    8   12   16
   6    9   13   17   20
  10   14   18   21   23
  15   19   22   24   25
Press any key to continue
新手,求指教……

人得一生得奋斗!
2011-08-26 15:06
饭桶
Rank: 6Rank: 6
等 级:侠之大者
帖 子:165
专家分:422
注 册:2011-4-5
收藏
得分:0 
回复 5楼
你厉害!

人得一生得奋斗!
2011-08-26 15:29
虾B写
Rank: 8Rank: 8
来 自:湖北
等 级:蝙蝠侠
威 望:3
帖 子:395
专家分:922
注 册:2009-10-1
收藏
得分:1 
各位,看着蛋痛的程序来了
程序代码:
int a[100][100];
int n;
main(){
    int l,i;
    int o=1;
    printf("N=");
    scanf("%d",&n);
    for(i=0;i<n*2-1;i++){
          for(l=(i>=n)?(n<<1)-i-2:i;l>-1;l--){
        a[i-l-((i>=n)?i-n+1:0)][l+((i>=n)?i-n+1:0)]=o;
        o++;
          }

    }
    for(l=0;l<n;l++){
        for(i=0;i<n;i++){
               printf("%5d",a[l][i]);
        }
        printf("\n");
    }
    getch();
}

白娘故意下雨骗许仙的伞。祝英台十八里相送时装疯卖傻调戏梁山伯。七仙女挡住了董永的去路。牛郎趁织女洗澡时拿走了她的衣服。。。这些故事告诉我们;伟大爱情的开始,总归的有一个要先耍流氓!
2011-08-26 16:19
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:3 
呵呵,这个如何:
程序代码:
#include<stdio.h>
int main()
{
    int i, j, k, s, n;
    scanf("%d", &n);
    for(i = 0; i < n; i++)
    {
        for(j = 0; j < n; j++)
        {
            k = i + j;
            s = k * (k + 1) / 2;
            if(k >= n)
            {
                k -= n - 1;
                s -= k * k;
            }
            printf("%-5d", s + i + 1);
        }
        printf("\n");
    }
    return 0;
}




重剑无锋,大巧不工
2011-08-26 16:50
快速回复:输出二维斜矩阵,高手请围观
数据加载中...
 
   



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

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