其他分享
首页 > 其他分享> > 判断普通数组或二维数组是否能成为单位矩阵

判断普通数组或二维数组是否能成为单位矩阵

作者:互联网

所谓单位矩阵,就是一个正方形矩阵,主对角线(左上角至右下角)的元素值为1,其余元素为0.

例如

1 0 0

0 1 0

0 0 1

//是否为矩阵
# include <stdbool.h>
# include <stdio.h>
# include <math.h>

bool identity_matrix(int*,int);


int main()
{
    /*int num[][5] = {
        {1},
        {0,1},
        {0,0,1},
        {0,0,0,1},
        {0,0,0,0,1}
    };
    int* pt = &num[0][0];*/

    int num[] = { 1,0,0,0,1,0,0,0,1 };
    bool result;
    int size;
    int* pt = &num[0];


    size = sizeof(num) / sizeof(num[0]);   //根据数组类型做修改,计算数组元素的数量

    result = identity_matrix(pt,size);

    if (result)
        puts("It is a identity matrix");
    else
        puts("It is not.");

    return 0;

}

bool identity_matrix(int *pt,int size)
{    
    int a = sqrt(size);   //求平方根
    int a1 = a;           //后面的for循环会用到

    if (a != sqrt(size))   //若平方根不为整数,则不成单位矩阵
        return false;

    if (!pt[0])            //首元素不为1,则不为单位矩阵
        return false;

    for (int i = size-1;i > 0;i =i-( a+1 ))   //特定位置的元素不为1,则不为矩阵
        if (!pt[i])
            return false;

    int sum = 0;
    for (int j = 0; j < size; j++)    //矩阵的每一行,有且只有一个元素为1
    {
        sum += pt[j];
if(sum > 1)
return false; if ((j+1) == a) //若相等,则说明此行的元素已经读尽 { a += a1; //sum归0,设置下一次元素读取范围 sum = 0; } } return true; }

 

标签:return,pt,int,sum,单位矩阵,二维,num,数组,size
来源: https://www.cnblogs.com/muyangbeihai/p/16415798.html