rank.c
int rank(int mat[][100], int n){
int ltmp[100], tmp, a_tmp[100], b_tmp[100];
int i, j, k;
int count;
int all_zero;
for(i = 0; i < n; i++){
all_zero = 0;
if(mat[i][i] == 0){
for(j = 0; j < n; j++){
if(mat[j][i] != 0){
for(k = 0; k < n; k++){
tmp = mat[i][k];
mat[i][k] = mat[j][k];
mat[j][k] = tmp;
}
} else if(j == n - 1)
all_zero = 1;
}
}
if(!all_zero){
for(j = i + 1; j < n; j++){
for(k = 0; k < n; k++){
a_tmp[k] = mat[i][k] * mat[j][i];
b_tmp[k] = mat[j][k] * mat[i][i];
}
for(k = 0; k < n; k++)
mat[j][k] = b_tmp[k] - a_tmp[k];
}
}
}
count = 0;
for(i = 0; i < n; i++){
if(mat[i][n] == 0)
count++;
}
return (n - count);
}
時給すら発生しないのに、頼まれたので書いた。
ループが多すぎる。何か良い方法はないだろうか。