Matrix78. Дана матрица размера $$M \times N$$. Упорядочить ее строки так, чтобы их минимальные элементы образовывали убывающую последовательность.
Решение:
#include <stdio.h> int N; int GetValueMatrixRowMin(int mat[10][10], int x){ int j,min=0; if (x>=0){ for (j=0; j<N; ++j){ if (mat[x][j]<mat[x][min]) min=j; } } return mat[x][min]; } int main(void) { int a[10][10]; int m; printf("M: "); scanf("%i",&m); printf("N: "); scanf("%i",&N); int i,j; for (i=0; i<m; ++i){ printf("%i : \n", i+1); for (j=0; j<N; ++j){ printf("%i : ", j+1); scanf("%i", &a[i][j]); } } int m2=m,i2; for (i=0; i<m-1; ++i){ i2=0; --m2; while (i2<m2){ if (GetValueMatrixRowMin(a,i2)<GetValueMatrixRowMin(a,i2+1)){ for (j=0;j<N; ++j) { a[i2][j]+=a[i2+1][j]; a[i2+1][j]=a[i2][j]-a[i2+1][j]; a[i2][j]=a[i2][j]-a[i2+1][j]; } } ++i2; } } for (i=0; i<m; ++i){ printf(" : %i_",GetValueMatrixRowMin(a,i)); for (j=0; j<N; ++j) printf(" : %i", a[i][j]); printf(" : \n"); } return 0; }
Другие задачи из раздела Matrix можно посмотреть здесь.
]]>Matrix77. Дана матрица размера $$M \times N$$. Упорядочить ее столбцы так, чтобы их последние элементы образовывали убывающую последовательность.
Решение:
#include <stdio.h> int main(void) { int a[10][10]; int m,n; printf("M: "); scanf("%i",&m); printf("N: "); scanf("%i",&n); int i,j; for (i=0; i<m; ++i){ printf("%i : \n", i+1); for (j=0; j<n; ++j){ printf("%i : ", j+1); scanf("%i", &a[i][j]); } } for (i=0; i<m; ++i){ for (j=0; j<n; ++j) printf(" : %i", a[i][j]); printf(" : \n"); } printf(" : \n"); int n2=n,j2; for (j=0; j<n-1; ++j){ j2=0; --n2; while (j2<n2){ if (a[m-1][j2]<a[m-1][j2+1]) for (i=0;i<m; ++i) { a[i][j]+=a[i][j2+1]; a[i][j2+1]=a[i][j]-a[i][j2+1]; a[i][j]=a[i][j]-a[i][j2+1]; } ++j2; } } for (i=0; i<m; ++i){ for (j=0; j<n; ++j) printf(" : %i", a[i][j]); printf(" : \n"); } return 0; }
Другие задачи из раздела Matrix можно посмотреть здесь.
]]>Matrix76. Дана матрица размера $$M \times N$$. Упорядочить ее строки так, чтобы их первые элементы образовывали возрастающую последовательность.
Решение:
#include <stdio.h> int main(void) { int a[10][10]; int m,n; printf("M: "); scanf("%i",&m); printf("N: "); scanf("%i",&n); int i,j; for (i=0; i<m; ++i){ printf("%i : \n", i+1); for (j=0; j<n; ++j){ printf("%i : ", j+1); scanf("%i", &a[i][j]); } } int m2=m,i2; for (i=0; i<m-1; ++i){ i2=0; --m2; while (i2<m2){ if (a[i2][0]>a[i2+1][0]) for (j=0;j<n; ++j) { a[i2][j]+=a[i2+1][j]; a[i2+1][j]=a[i2][j]-a[i2+1][j]; a[i2][j]=a[i2][j]-a[i2+1][j]; } ++i2; } } for (i=0; i<m; ++i){ for (j=0; j<n; ++j) printf(" : %i", a[i][j]); printf(" : \n"); } return 0; }
Другие задачи из раздела Matrix можно посмотреть здесь.
]]>Matrix75. Дана матрица размера $$M \times N$$. Элемент матрицы называется ее локальным максимумом, если он больше всех окружающих его элементов. Поменять знак всех локальных максимумов данной матрицы на противоположный. При решении допускается использовать вспомогательную матрицу.
Решение:
#include <stdio.h> int main(void) { int b[10][10],a[10][10]; int m,n; printf("M: "); scanf("%i",&m); printf("N: "); scanf("%i",&n); int i,j; for (i=0; i<m; ++i){ printf("%i : \n", i+1); for (j=0; j<n; ++j){ printf("%i : ", j+1); scanf("%i", &a[i][j]); } } int num; for (i=0; i<m; ++i){ for (j=0; j<n; ++j){ num=0; if (i-1>=0) { if (a[i][j]>a[i-1][j]) num++; } else ++num; if ((i+1)<m){ if (a[i][j]>a[i+1][j]) num++; } else ++num; if (j-1>=0) { if (a[i][j]>a[i][j-1]) num++; } else ++num; if ((j+1)<n){ if (a[i][j]>a[i][j+1]) num++; } else ++num; if (num==4) b[i][j]=-a[i][j]; else b[i][j]=a[i][j]; } } for (i=0; i<m; ++i) for (j=0; j<n; ++j) a[i][j]=b[i][j]; for (i=0; i<m; ++i){ for (j=0; j<n; ++j) printf(" : %i", a[i][j]); printf(" : \n"); } return 0; }
Другие задачи из раздела Matrix можно посмотреть здесь.
]]>Matrix74. Дана матрица размера $$M \times N$$. Элемент матрицы называется ее локальным минимумом, если он меньше всех окружающих его элементов. Заменить все локальные минимумы данной матрицы на нули. При решении допускается использовать вспомогательную матрицу.
Решение:
#include <stdio.h> int main(void) { int b[10][10],a[10][10]; int m,n; printf("M: "); scanf("%i",&m); printf("N: "); scanf("%i",&n); int i,j; for (i=0; i<m; ++i){ printf("%i : \n", i+1); for (j=0; j<n; ++j){ printf("%i : ", j+1); scanf("%i", &a[i][j]); } } int num; for (i=0; i<m; ++i){ for (j=0; j<n; ++j){ num=0; if (i-1>=0) { if (a[i][j]<a[i-1][j]) num++; } else ++num; if ((i+1)<m){ if (a[i][j]<a[i+1][j]) num++; } else ++num; if (j-1>=0) { if (a[i][j]<a[i][j-1]) num++; } else ++num; if ((j+1)<n){ if (a[i][j]<a[i][j+1]) num++; } else ++num; if (num==4) b[i][j]=0; else b[i][j]=a[i][j]; } } for (i=0; i<m; ++i) for (j=0; j<n; ++j) a[i][j]=b[i][j]; for (i=0; i<m; ++i){ for (j=0; j<n; ++j) printf(" : %i", a[i][j]); printf(" : \n"); } return 0; }
Другие задачи из раздела Matrix можно посмотреть здесь.
]]>Matrix73. Дана матрица размера $$M \times N$$. После последнего столбца, содержащего только отрицательные элементы, вставить столбец из нулей. Если требуемых столбцов нет, то вывести матрицу без изменений.
Решение:
#include <stdio.h> int main(void) { int a[10][10]; int m,n; printf("M: "); scanf("%i",&m); printf("N: "); scanf("%i",&n); int i,j; for (i=0; i<m; ++i){ printf("%i : \n", i+1); for (j=0; j<n; ++j){ printf("%i : ", j+1); scanf("%i", &a[i][j]); } } for (j=n-1; j>=0; --j){ for (i=0; i<m; ++i){ if (a[i][j]>0) break; } if (i==n) break; } int column=j; ++n; for (j=n-1; j>column+1; --j) for (i=0; i<n; ++i) a[i][j]=a[i][j-1]; for (i=0; i<n; ++i) a[i][column+1]=0; for (i=0; i<m; ++i){ for (j=0; j<n; ++j) printf(" : %i", a[i][j]); printf(" : \n"); } return 0; }
Другие задачи из раздела Matrix можно посмотреть здесь.
]]>Matrix72. Дана матрица размера $$M \times N$$. Перед первым столбцом, содержащим только положительные элементы, вставить столбец из единиц. Если требуемых столбцов нет, то вывести матрицу без изменений.
Решение:
#include <stdio.h> int main(void) { int a[10][10]; int m,n; printf("M: "); scanf("%i",&m); printf("N: "); scanf("%i",&n); int i,j; for (i=0; i<m; ++i){ printf("%i : \n", i+1); for (j=0; j<n; ++j){ printf("%i : ", j+1); scanf("%i", &a[i][j]); } } for (j=0; j<n; ++j){ for (i=0; i<m; ++i){ if (a[i][j]<0) break; } if (i==n) break; } int column=j; ++n; for (j=n-1; j>column; --j) for (i=0; i<n; ++i) a[i][j]=a[i][j-1]; for (i=0; i<m; ++i){ for (j=0; j<n; ++j) printf(" : %i", a[i][j]); printf(" : \n"); } return 0; }
Другие задачи из раздела Matrix можно посмотреть здесь.
]]>Matrix71. Дана матрица размера $$M \times N$$. Продублировать столбец матрицы, содержащий ее минимальный элемент.
Решение:
#include <stdio.h> int main(void) { int a[10][10]; int m,n; printf("M: "); scanf("%i",&m); printf("N: "); scanf("%i",&n); int i,j; for (i=0; i<m; ++i){ printf("%i : \n", i+1); for (j=0; j<n; ++j){ printf("%i : ", j+1); scanf("%i", &a[i][j]); } } int mini=0,maxj=0; for (i=0; i<m; ++i){ for (j=0; j<n; ++j){ if (a[i][j]<a[mini][maxj]){ mini=i; maxj=j; } } } ++n; for (j=n-1; j>maxj; --j) for (i=0; i<n; ++i) a[i][j]=a[i][j-1]; for (i=0; i<m; ++i){ for (j=0; j<n; ++j) printf(" : %i", a[i][j]); printf(" : \n"); } return 0; }
Другие задачи из раздела Matrix можно посмотреть здесь.
]]>Matrix70. Дана матрица размера $$M \times N$$. Продублировать строку матрицы, содержащую ее максимальный элемент.
Решение:
#include <stdio.h> int main(void) { int a[10][10]; int m,n,k; printf("M: "); scanf("%i",&m); printf("N: "); scanf("%i",&n); int i,j; for (i=0; i<m; ++i){ printf("%i : \n", i+1); for (j=0; j<n; ++j){ printf("%i : ", j+1); scanf("%i", &a[i][j]); } } int maxi=0, maxj=0; for (i=0; i<m; ++i){ for (j=0; j<n; ++j){ if (a[i][j]>a[maxi][maxj]){ maxi=i; maxj=j; } } } ++m; for (i=m-1; i>maxi; --i) for (j=0; j<n; ++j) a[i][j]=a[i-1][j]; for (i=0; i<m; ++i){ for (j=0; j<n; ++j) printf(" : %i", a[i][j]); printf(" : \n"); } return 0; }
Другие задачи из раздела Matrix можно посмотреть здесь.
]]>Matrix69. Дана матрица размера $$M \times N$$ и целое число $$K$$ $$(1 \le K \le $$N$$)$$. После столбца матрицы с номером $$K$$ вставить столбец из единиц.
Решение:
#include <stdio.h> int main(void) { int a[10][10]; int m,n,k; printf("M: "); scanf("%i",&m); printf("N: "); scanf("%i",&n); printf("K: "); scanf("%i",&k); int i,j; for (i=0; i<m; ++i){ printf("%i : \n", i+1); for (j=0; j<n; ++j){ printf("%i : ", j+1); scanf("%i", &a[i][j]); } } ++n; for (j=n-1; j>k; --j) for (i=0; i<n; ++i) a[i][j]=a[i][j-1]; for (i=0; i<m; ++i) a[i][k]=1; for (i=0; i<m; ++i){ for (j=0; j<n; ++j) printf(" : %i", a[i][j]); printf(" : \n"); } return 0; }
Другие задачи из раздела Matrix можно посмотреть здесь.
]]>