首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

怎么求矩阵中其余的元素

2014-01-19 
如何求矩阵中其余的元素输入 130 120 172 140 195 157 93 144 168 66 1950 1 15 1 3 49 2 2 16 3 0 33即矩

如何求矩阵中其余的元素
输入 130 120 172 140 195 157 93 144 168 66 195 
     0 1 15 1 3 49 2 2 16 3 0 33
即矩阵4行、4列、主副对角线元素之和,以及每行一个元素(如下图),求出矩阵中其余12个元素,输出该矩阵,求代码
15793144168
13015
12049
17216
14033
19566

输出
22152865
4912149
53761627
3317927


//http://bbs.csdn.net/topics/390693018
//输入             //4×4矩阵
// 130 120 172 140 //矩阵4行元素之和
// 195             //矩阵副对角线元素之和
// 157  93 144 168 //矩阵4列元素之和
// 66              //矩阵主对角线元素之和
// 195             //重复一遍,矩阵副对角线元素之和
// 0 1 15          //(0,1)处为15
// 1 3 49          //(1,3)处为49
// 2 2 16          //(2,2)处为16
// 3 0 33          //(3,0)处为33
//编程求矩阵
//输出
// 22 15 28 65
// 49  1 21 49
// 53 76 16 27
// 33  1 79 27
#include <stdio.h>
#include <conio.h>
#define VMIN 0   //假定矩阵元素最小0
#define VMAX 99  //假定矩阵元素最大99
int hh[4];//行和
int lh[4];//列和
int zh,fh;//主(对角线)和,副(对角线)和
int jz[4][4];//矩阵
int yz[4][4];//已知矩阵
static int bz[4][4];//标志:0未知
[解决办法]
1已知
int h,l,z;//行,列,值
int cs() {//测试,通过返回1,通不过返回0
    int y,x,s,i;

    for (y=0;y<4;y++) {
        s=0;
        for (x=0;x<4;x++) {
            s+=jz[y][x];
        }
        if (s!=hh[y]) return 0;
    }
    for (x=0;x<4;x++) {
        s=0;
        for (y=0;y<4;y++) {
            s+=jz[y][x];
        }
        if (s!=lh[x]) return 0;
    }
    s=0;
    for (i=0;i<4;i++) {
        s+=jz[i][i];
    }
    if (s!=zh) return 0;
    s=0;
    for (i=0;i<4;i++) {
        s+=jz[i][4-1-i];
    }
    if (s!=fh) return 0;
    return 1;
}
void xs() {//显示
    int y,x;

    for (y=0;y<4;y++) {
        for (x=0;x<4;x++) {
            printf("%3d",jz[y][x]);
        }
        printf("\n");
    }
    printf("\n");
}
int main() {
    for (h=0;h<4;h++) scanf("%d",&hh[h]);
    scanf("%d",&fh);
    for (l=0;l<4;l++) scanf("%d",&lh[l]);
    scanf("%d",&zh);
    scanf("%*d");
    scanf("%d%d%d",&h,&l,&z);yz[h][l]=z;bz[h][l]=1;
    scanf("%d%d%d",&h,&l,&z);yz[h][l]=z;bz[h][l]=1;
    scanf("%d%d%d",&h,&l,&z);yz[h][l]=z;bz[h][l]=1;
    scanf("%d%d%d",&h,&l,&z);yz[h][l]=z;bz[h][l]=1;

    for (jz[0][0]=((bz[0][0])?yz[0][0]:VMIN);jz[0][0]<=((bz[0][0])?yz[0][0]:VMAX);jz[0][0]++) {


    for (jz[0][1]=((bz[0][1])?yz[0][1]:VMIN);jz[0][1]<=((bz[0][1])?yz[0][1]:VMAX);jz[0][1]++) {
    for (jz[0][2]=((bz[0][2])?yz[0][2]:VMIN);jz[0][2]<=((bz[0][2])?yz[0][2]:VMAX);jz[0][2]++) {
    for (jz[0][3]=((bz[0][3])?yz[0][3]:VMIN);jz[0][3]<=((bz[0][3])?yz[0][3]:VMAX);jz[0][3]++) {
    for (jz[1][0]=((bz[1][0])?yz[1][0]:VMIN);jz[1][0]<=((bz[1][0])?yz[1][0]:VMAX);jz[1][0]++) {
    for (jz[1][1]=((bz[1][1])?yz[1][1]:VMIN);jz[1][1]<=((bz[1][1])?yz[1][1]:VMAX);jz[1][1]++) {
    for (jz[1][2]=((bz[1][2])?yz[1][2]:VMIN);jz[1][2]<=((bz[1][2])?yz[1][2]:VMAX);jz[1][2]++) {
    for (jz[1][3]=((bz[1][3])?yz[1][3]:VMIN);jz[1][3]<=((bz[1][3])?yz[1][3]:VMAX);jz[1][3]++) {
    for (jz[2][0]=((bz[2][0])?yz[2][0]:VMIN);jz[2][0]<=((bz[2][0])?yz[2][0]:VMAX);jz[2][0]++) {
    for (jz[2][1]=((bz[2][1])?yz[2][1]:VMIN);jz[2][1]<=((bz[2][1])?yz[2][1]:VMAX);jz[2][1]++) {
    for (jz[2][2]=((bz[2][2])?yz[2][2]:VMIN);jz[2][2]<=((bz[2][2])?yz[2][2]:VMAX);jz[2][2]++) {
    for (jz[2][3]=((bz[2][3])?yz[2][3]:VMIN);jz[2][3]<=((bz[2][3])?yz[2][3]:VMAX);jz[2][3]++) {
    for (jz[3][0]=((bz[3][0])?yz[3][0]:VMIN);jz[3][0]<=((bz[3][0])?yz[3][0]:VMAX);jz[3][0]++) {
    for (jz[3][1]=((bz[3][1])?yz[3][1]:VMIN);jz[3][1]<=((bz[3][1])?yz[3][1]:VMAX);jz[3][1]++) {
    for (jz[3][2]=((bz[3][2])?yz[3][2]:VMIN);jz[3][2]<=((bz[3][2])?yz[3][2]:VMAX);jz[3][2]++) {
    for (jz[3][3]=((bz[3][3])?yz[3][3]:VMIN);jz[3][3]<=((bz[3][3])?yz[3][3]:VMAX);jz[3][3]++) {
        if (cs()) {
            printf("OK\n");
            xs();
            return 1;
        }
    }}}}}}}}}}}}}}}}
    return 0;
}

热点排行