注册 登录
编程论坛 C++教室

杨氏矩阵

紫罗兰丹丹 发布于 2014-03-28 17:20, 367 次点击
碰到一个关于杨氏矩阵的题目,就是讲1~9排成3*3的杨氏矩阵,输出所有可能结果,一点头绪都没有,做出的这个程序
#include<iostream>
#include<stdio.h>
using namespace std;

int main()
{
    int a[9];
    int jz[3][3];//定义矩阵
    int k,x,n=0,m=0,y;
    cout <<"请以任意顺序输入1~9:" <<endl;
    for(int i=0;i<=8;i++)//将数组a的元素填入矩阵中
    {
        k=a[i];
        cin >>k;//此为输入数组a的元素
        jz[m][n]=k;
        if(n<3)
            n++;
        else
        {
            n=n-2;
            m++;
        }
        break;
    }
    for(m=0;m<=2;m++)
    {
        for(n=0;n<=2;n++)
        {
            if(jz[m][n]<jz[m+1][n])
            {
                if(jz[m+1][n]<jz[m][n+1])//交换矩阵中的元素位置
                {
                    y=jz[m][n];
                    jz[m][n]=jz[m+1][n];
                    jz[m+1][n]=y;
                }
                else
                {
                    y=jz[m][n];
                    jz[m][n]=jz[m][n+1];
                    jz[m][n+1]=y;
                }
            }
            cout <<jz[m][n] <<" ";//输出矩阵
        }
        cout <<endl;
    }
}

问题是编译连接都无错,但是在运行的时候矩阵中元素没有发生交换,是什么原因?
这个思路有问题,不能输出所有结果,但是好像随机数函数不好用,怎么办?
2 回复
#2
天使梦魔2014-03-28 17:41
tmd谁那么刁,居然还有杨氏矩阵,有没有杨氏语言

第一眼的错误:
if(n<3)
那么n=2不会为假状态吧,如果n=2还继续执行n+1是真的吧那么下一次就是n=3
那n=3这个条件就为假吧,执行else吧,那看看n=n-2就是1吧,下标错了吧
其它没看
#3
紫罗兰丹丹2014-03-28 23:20
回复 2楼 天使梦魔
试着把n<3改成n<2,结果还是不会进行矩阵中的元素交换。。比如,输入3 4 7 9 1 6 5 2 8,输出就是
3 4 7
9 1 6
5 2 8.。
怎样改能让矩阵元素进行交换?
1