1、
#define MaxN 100
void TRANSFORM(ElemType A[][MaxN], int m, int n, ElemType TA[][3])
{
int i, j, t = 0;
TA[0][0] = m; //总行数
TA[0][1] = n; //总列数
for(i = 0; i < m; i++)
{
for(j = 0; j < n; j++)
{
if(A[i][j] != 0)
{
TA[++t][0] = i;
TA[t][1] = j;
TA[t][2] = A[i][j];
}
}
}
TA[0][2] = t; //非0元素数目总和
}
2、
#define MaxN 100
void STORAB(ElemType A[][MaxN], int m, int n, ElemType B[])
{
int i, j, k = 0;
for(j = 0; j < n; j++)
for(i = j+1; i < n; i++)
B[k++] = A[i][j];
}
3、
#define MaxN 100
void MATRIXA(ElemType TA[][3], ElemType A[][MaxN])
{
int i, j;
for(i = 1; i <= TA[0][2]; i++)
{
A[TA[i][0]-1][TA[i][1]-1] = TA[i][2];
A[TA[i][1]-1][TA[i][0]-1] = TA[i][2];
}
return TA[0][0];
}
4、
void MOVE(ElemType A[], int n, int k)
{
int count, i;
ElemType temp;
for(count = 1; count <= k; count++) //每个循环所有位后移一个
{
temp = A[n-1];
for(i = n-2; i >= 0; i--)
A[i+1] = A[i];
A[0] = temp;
}
}
5、
逆转后n-k个,再逆转前k个,再整体逆转
void MOVE1(ElemType A[], int n, int k)
{
REVERSE(A, n-k, n-1);
REVERSE(A, 0,, n-k-1);
REVERSE(A, 0, n-1);
}
void REVERSE(ElemType A[], int from, int to)
{
ElemType temp;
int i;
for(i = 0; i < (to-from+1)/2; i++)
{
temp = A[from+i];
A[from+i] = A[to-i];
A[to-i] = temp;
}
}
6、
#define MaxN 100
#define M 3*n-2
void EXSORT(ElemType A[][MaxN], int n, ElemType B[M])
{
int i, j, k;
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
if(A[i][j] != 0)
{
k = 2*i+j-3;
B[k] = A[i][j];
}
}
7、
#define MaxN 100
int MULT(int A[][MaxN], int n)
{
int i, j, s = 1;
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
scanf("%d",&A[i][j]);
for(i = 0; i < n; i++)
s = s * A[i][i] * A[i][n-i-1];
if(A[n/2][n/2] != 0) // 去除被多乘一次的矩阵中间值
s /= A[n/2][n/2];
return s;
}
8、
#define MaxN 100
ElemType ACCUMULATE(ElemType A[][MaxN], int m, int n)
{
ElemType sum = 0;
int k;
for(k = 0; k < n; k++)
{
sum += A[0][k];
sum += A[m-1][k];
}
for(k = 1; k < m-1; k++)
{
sum += A[k][0];
sum += A[k][n-1];
}
return sum;
}
9、
#define MaxN 100
void REVOLUE(ElemType A[][MaxN], int n)
{
int i, j;
ElemType temp;
for(i = 0; i < n/2; i++)
for(j = i; j < n-i-1; j++)
{
temp = A[i][j];
A[i][j] = A[n-j-1][i];
A[n-j-1][i] = A[n-i-1][n-j-1];
A[n-i-1][n-j-1] = A[j][n-i-1];
A[j][n-i-1] = temp;
}
}
10、略
11、
#define MaxN 100
int SADDLE(int A[][MaxN], int m, int n)
{
ElemType min, max;
int i, j, ii, jj;
for(i = 0; i < m; i++)
{
min = A[i][0];
jj = 0;
for(j = 1; j < n; j++)
if(A[i][j] < min)
{
min = A[i][j];
jj = j;
}
max = A[i][j];
ii = 0;
while(ii < m && max > A[ii][jj])
i++;
if(ii > m-1)
return A[i][jj];
}
return 0;
}
12、
void ODDEVEN(int A[], int n)
{
int temp, i = 0, j = n-1;
while(i < j)
{
while(i < n && A[i] % 2 != 0) i++;
while(j >= 0 && A[j] % 2 == 0) j--;
if(i < j)
{
temp = A[i];
A[i++] = A[j];
A[j--] = temp;
}
}
}
13、
void MOVE3(int A[], int n)
{
int k = -1;
for(i = 0; i < n; i++)
if(A[i] != 0)
{
A[++k] = A[i];
if(i != k)
A[i] = 0;
}
}