杨氏矩阵

强圆nice 2014-06-26 12:04:17
杨氏矩阵的定义: 一个矩阵,每行的元素从左到右单调递增,每列的元素从上到下也单调递增的矩阵。我们用从1-n这n个数可以构成多少个杨氏矩阵?
例如n = 4的时候
我们可以构成1行4列的矩阵:
1 2 3 4
2个2行2列的矩阵:
1 2
3 4

1 3
2 4
还有一个4行1列的矩阵
1
2
3
4
因此输出4。
输入n(1<=n<=1000000000),输出用整数1-n组成的杨氏矩阵个数。因为结果比较大只输出对10007取余数的结果。
...全文
113 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2014-06-26
  • 打赏
  • 举报
回复
仅供参考
//定义一个m行n列的数组,比如3行4列
// 1  2  4  7
// 3  5  8 10
// 6  9 11 12
#include <stdio.h>
#include <conio.h>
int a[20][20];
int m,n;
int x,y;
int d;
void find_first_0(int *fx,int *fy) {
    int i,j;

    *fx=0;
    *fy=0;
    for (i=0;i<m;i++) {
        for (j=0;j<n;j++) {
            if (0==a[i][j]) {
                *fx=j;
                *fy=i;
                return;
            }
        }
    }
}
void main() {
    printf("Input m(1..20),n(1..20):");
    scanf("%d,%d",&m,&n);
    if (m<1 || 20<m || n<1 || 20<n) return;
    for (y=0;y<m;y++) for (x=0;x<n;x++) a[y][x]=0;
    d=1;
    x=0;
    y=0;
    while (1) {
        a[y][x]=d;
        d++;
        while (1) {
            x--;
            if (x<0) break;
            y++;
            if (y>=m) break;
            a[y][x]=d;
            d++;
        }
        find_first_0(&x,&y);
        if (0==x && 0==y) break;
    }
    for (y=0;y<m;y++) {
        for (x=0;x<n;x++) {
            printf("%2d ",a[y][x]);
        }
        printf("\n");
    }
    getch();
}
modyaj 2014-06-26
  • 打赏
  • 举报
回复
自己网上找哈资料 应该有 很多笔试面试的资料书上也都讲过这样的例子 随便参考下 就能搞出来的http://blog.csdn.net/huangxy10/article/details/8017765

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧