【再找一个小角落】

很棒的编辑窗口@TOC

【之前发的找一个小角落的帖子,发现只能回帖三次,所以正式搬迁到了博客】

【0310】
截尾正态分布的参数估计要怎么做呀好烦欸

### 回答1: 以下是CSDN开发的C知道的回答: 1. 鞍点的实现代码如下: ```c #include <stdio.h> #define ROW 5 #define COL 5 int matrix[ROW][COL] = { {1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}, {11, 12, 13, 14, 15}, {16, 17, 18, 19, 20}, {21, 22, 23, 24, 25} }; void findSaddlePoint(int matrix[ROW][COL]) { int i, j, k, min, max, flag; for (i = 0; i < ROW; i++) { min = matrix[i][0]; flag = 1; for (j = 1; j < COL; j++) { if (matrix[i][j] < min) { min = matrix[i][j]; k = j; } } max = matrix[i][k]; for (j = 0; j < ROW; j++) { if (matrix[j][k] > max) { flag = 0; break; } } if (flag) { printf("鞍点为(%d, %d),值为%d\n", i, k, max); } } } int main() { findSaddlePoint(matrix); return 0; } ``` 2. 将矩阵中最大的元素放在中心,四个角分别放四个最小的元素的实现代码如下: ```c #include <stdio.h> #define ROW 5 #define COL 5 int matrix[ROW][COL] = { {1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}, {11, 12, 13, 14, 15}, {16, 17, 18, 19, 20}, {21, 22, 23, 24, 25} }; void findMaxAndMin(int matrix[ROW][COL], int *max, int *min) { int i, j; *max = matrix[0][0]; *min = matrix[0][0]; for (i = 0; i < ROW; i++) { for (j = 0; j < COL; j++) { if (matrix[i][j] > *max) { *max = matrix[i][j]; } if (matrix[i][j] < *min) { *min = matrix[i][j]; } } } } void swap(int *a, int *b) { int temp = *a; *a = *b; *b = temp; } void sort(int arr[], int len) { int i, j; for (i = 0; i < len - 1; i++) { for (j = 0; j < len - 1 - i; j++) { if (arr[j] > arr[j + 1]) { swap(&arr[j], &arr[j + 1]); } } } } void replace(int matrix[ROW][COL], int max, int min) { int i, j, x, y; for (i = 0; i < ROW; i++) { for (j = 0; j < COL; j++) { if (matrix[i][j] == max) { x = i; y = j; } } } matrix[x][y] = matrix[ROW / 2][COL / 2]; matrix[ROW / 2][COL / 2] = max; int arr[4] = {matrix[0][0], matrix[0][COL - 1], matrix[ROW - 1][0], matrix[ROW - 1][COL - 1]}; sort(arr, 4); matrix[0][0] = arr[0]; matrix[0][COL - 1] = arr[1]; matrix[ROW - 1][0] = arr[2]; matrix[ROW - 1][COL - 1] = arr[3]; for (i = 0; i < ROW; i++) { for (j = 0; j < COL; j++) { printf("%d ", matrix[i][j]); } printf("\n"); } } int main() { int max, min; findMaxAndMin(matrix, &max, &min); replace(matrix, max, min); return 0; } ``` ### 回答2: 1)鞍点的函数实现如下: ```c #include <stdio.h> #include <stdbool.h> #define ROWS 5 #define COLS 5 bool isSaddlePoint(int matrix[ROWS][COLS], int row, int col) { for (int i = 0; i < COLS; i++) { if (matrix[row][i] > matrix[row][col]) { return false; } } for (int i = 0; i < ROWS; i++) { if (matrix[i][col] < matrix[row][col]) { return false; } } return true; } void findSaddlePoints(int matrix[ROWS][COLS]) { bool hasSaddlePoint = false; for (int i = 0; i < ROWS; i++) { for (int j = 0; j < COLS; j++) { if (isSaddlePoint(matrix, i, j)) { printf("鞍点位置:(%d, %d),值:%d\n", i, j, matrix[i][j]); hasSaddlePoint = true; } } } if (!hasSaddlePoint) { printf("矩阵中没有鞍点。\n"); } } int main() { int matrix[ROWS][COLS] = {{5, 2, 3, 4, 1}, {6, 3, 2, 1, 5}, {4, 1, 6, 5, 3}, {3, 5, 4, 2, 6}, {2, 4, 5, 6, 1}}; findSaddlePoints(matrix); return 0; } ``` 2)最大元素放中心、四个最小元素放角的函数实现如下: ```c #include <stdio.h> #define ROWS 5 #define COLS 5 void swap(int* a, int* b) { int temp = *a; *a = *b; *b = temp; } void findMinAndMax(int matrix[ROWS][COLS], int* min, int* max) { *min = matrix[0][0]; *max = matrix[0][0]; for (int i = 0; i < ROWS; i++) { for (int j = 0; j < COLS; j++) { if (matrix[i][j] < *min) { *min = matrix[i][j]; } if (matrix[i][j] > *max) { *max = matrix[i][j]; } } } } void rearrangeMatrix(int matrix[ROWS][COLS]) { int min, max; findMinAndMax(matrix, &min, &max); // 寻最大元素的位置 int maxRow, maxCol; for (int i = 0; i < ROWS; i++) { for (int j = 0; j < COLS; j++) { if (matrix[i][j] == max) { maxRow = i; maxCol = j; } } } // 将最大元素放在矩阵中心 swap(&matrix[maxRow][maxCol], &matrix[ROWS/2][COLS/2]); // 寻最小元素的位置 int minRow = 0, minCol = 0; for (int i = 0; i < ROWS; i++) { for (int j = 0; j < COLS; j++) { if (matrix[i][j] == min) { minRow = i; minCol = j; break; } } } // 将四个最小元素放在角 if (minRow != 0) { swap(&matrix[minRow][minCol], &matrix[0][0]); } if (minRow != 0 && minCol != COLS - 1) { swap(&matrix[minRow][minCol], &matrix[0][COLS - 1]); } if (minRow != ROWS - 1 && minCol != COLS - 1) { swap(&matrix[minRow][minCol], &matrix[ROWS - 1][COLS - 1]); } if (minRow != ROWS - 1 && minCol != 0) { swap(&matrix[minRow][minCol], &matrix[ROWS - 1][0]); } } int main() { int matrix[ROWS][COLS] = {{5, 2, 3, 4, 1}, {6, 3, 2, 1, 5}, {4, 1, 6, 5, 3}, {3, 5, 4, 2, 6}, {2, 4, 5, 6, 1}}; rearrangeMatrix(matrix); printf("重新排列后的矩阵:\n"); for (int i = 0; i < ROWS; i++) { for (int j = 0; j < COLS; j++) { printf("%d ", matrix[i][j]); } printf("\n"); } return 0; } ``` ### 回答3: 首先,我们可以定义一个函数来出矩阵中的鞍点。该函数接收矩阵作为参数,并返回一个包含鞍点位置的结构体。 ```c #include <stdio.h> typedef struct { int row; int column; } Position; Position findSaddlePoint(int matrix[5][5]) { Position saddlePoint; saddlePoint.row = -1; saddlePoint.column = -1; for (int i = 0; i < 5; i++) { int maxRow = matrix[i][0]; int colIndex = 0; for (int j = 1; j < 5; j++) { if (matrix[i][j] > maxRow) { maxRow = matrix[i][j]; colIndex = j; } } int minColumn = matrix[0][colIndex]; for (int k = 1; k < 5; k++) { if (matrix[k][colIndex] < minColumn) { minColumn = matrix[k][colIndex]; } } if (maxRow == minColumn) { saddlePoint.row = i; saddlePoint.column = colIndex; break; } } return saddlePoint; } int main() { int matrix[5][5] = { {3, 2, 1, 5, 4}, {4, 5, 6, 2, 1}, {1, 3, 2, 4, 5}, {6, 4, 3, 1, 2}, {2, 1, 4, 3, 6} }; Position saddlePoint = findSaddlePoint(matrix); if (saddlePoint.row == -1 && saddlePoint.column == -1) { printf("矩阵中没有鞍点。\n"); } else { printf("鞍点位置:第%d行,第%d列\n", saddlePoint.row + 1, saddlePoint.column + 1); } return 0; } ``` 接下来,我们可以定义一个函数来将矩阵中的最大元素放在中心,四个角分别放四个最小元素。 ```c #include <stdio.h> void swap(int *a, int *b) { int temp = *a; *a = *b; *b = temp; } void rearrangeMatrix(int matrix[5][5]) { // 出最大元素的位置 int maxRow = 0, maxColumn = 0; for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { if (matrix[i][j] > matrix[maxRow][maxColumn]) { maxRow = i; maxColumn = j; } } } // 交换最大元素与中心元素的位置 swap(&matrix[2][2], &matrix[maxRow][maxColumn]); // 出四个最小元素的位置 int minPositions[4][2] = {{0, 0}, {0, 4}, {4, 0}, {4, 4}}; for (int k = 0; k < 4; k++) { int minRow = minPositions[k][0]; int minColumn = minPositions[k][1]; for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { if (matrix[i][j] < matrix[minRow][minColumn]) { minRow = i; minColumn = j; } } } // 交换最小元素与角落元素的位置 swap(&matrix[minPositions[k][0]][minPositions[k][1]], &matrix[minRow][minColumn]); } } int main() { int matrix[5][5] = { {3, 2, 1, 5, 4}, {4, 5, 6, 2, 1}, {1, 3, 2, 4, 5}, {6, 4, 3, 1, 2}, {2, 1, 4, 3, 6} }; rearrangeMatrix(matrix); printf("重排后的矩阵:\n"); for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { printf("%d ", matrix[i][j]); } printf("\n"); } return 0; } ``` 希望这些代码能帮助到你!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值