446 回形方阵.c 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. /* 样例输入
  4. 3 3
  5. 140 160 140
  6. 183 172 170
  7. 180 181 174
  8. 输出行平均值
  9. */
  10. //创建行列式
  11. int **arrInit(int m, int n);
  12. // 释放行列式
  13. void arrClose(int m, int n, int **pInt);
  14. int max(int a, int b);
  15. int min(int a, int b);
  16. int main() {
  17. int m, n;
  18. scanf("%d", &n);
  19. m = n;
  20. int **l = arrInit(m, n);
  21. arrClose(m, n, l);
  22. return 0;
  23. }
  24. void arrClose(int m, int n, int **pInt) {
  25. for (int i = 0; i < m; ++i) {
  26. free(pInt[i]);
  27. }
  28. free(pInt);
  29. }
  30. int **arrInit(int m, int n) {
  31. int **l;
  32. if (m % 2) {
  33. int k = m / 2;
  34. l = (int **) malloc(m * sizeof(int *));
  35. for (int i = 0; i < m; i++) {
  36. l[i] = (int *) malloc(n * sizeof(int));
  37. for (int j = 0; j < n; ++j) {
  38. l[i][j] = 1 + k - max(abs(k - i), abs(k - j));
  39. printf("%d", l[i][j]);
  40. if (j != n - 1)printf(" ");
  41. }
  42. printf("\n");
  43. }
  44. } else {
  45. int k = m / 2;
  46. l = (int **) malloc(m * sizeof(int *));
  47. for (int i = 0; i < m; i++) {
  48. l[i] = (int *) malloc(n * sizeof(int));
  49. for (int j = 0; j < n; ++j) {
  50. if (j + i >= k * 2)
  51. l[i][j] = k - max(abs(k - i), abs(k - j));
  52. else
  53. l[i][j] = 1 + k - max(abs(k - i), abs(k - j));
  54. printf("%d", l[i][j]);
  55. if (j != n - 1)printf(" ");
  56. }
  57. printf("\n");
  58. }
  59. }
  60. return l;
  61. }
  62. int min(int a, int b) {
  63. return a < b ? a : b;
  64. }
  65. int max(int a, int b) {
  66. return a > b ? a : b;
  67. }