Определить минимум среди сумм элементов диагоналей, параллельных главной диагонали матрицы - C (СИ)
Формулировка задачи:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int x[10][10];
int m,n,sum=0,i,j;
printf("Vvedite kolichestvo strok ");
scanf("%d",&m);
printf("Vvedite kolichestvo stolbcov ");
scanf("%d",&n);
printf("Vvedite matricu");
for (i=0; i<m; i++)
for (j=0; j<n; j++)
{
printf("x[%d][%d]= ",i,j);
scanf("%d",&(x[i][j]));
}
printf("vveden massiv \n");
for(i=0;i<m;i++)
{
for (j=0;j<n;j++)
printf("%d ",(x[i][j]));
printf ("\n");
}
for(i=0;i<m;i++)
{
for (j=0;j<n;j++)
if (x[i][j]==0)
break;
else sum+=x[i][j];}
printf ("%d",sum);
return 0;
}Решение задачи: «Определить минимум среди сумм элементов диагоналей, параллельных главной диагонали матрицы»
#include <iostream>
#include <vector>
using namespace std;
int main(){
int n, tmp, total=0;
bool mark;
vector <int> total_non_neg;
cout << "Enter dimension of matrix: ";
cin >> n;
tmp = n-1;
int **ptr = new int*[n];
for (int i=0; i<n; i++){
mark = true;
*(ptr+i) = new int[n];
for (int j=0; j<n; j++){
cin >> *(*(ptr+i)+j);
if(*(*(ptr+i)+j)>-1 && mark)
total+=*(*(ptr+i)+j);
else{
mark = false;
total = 0;
}
}
if (total){
total_non_neg.push_back(total);
total = 0;
}
}
cout << endl;
for (int i=0; i<n; i++){
for (int j=0; j<n; j++){
cout << *(*(ptr+i)+j) << " ";
}
cout << endl;
}
cout << "\nSum of string with all nonzero elements: " << endl;
for (int i=0; i<total_non_neg.size(); i++){
cout << "Sum is: " << total_non_neg[i] << endl;
}
//для элементов диагонали разность между индексами элемента всегда постоянная
while(tmp!=-n){
for (int j=0; j<n; j++){
for (int i=0; i<n; i++){
if(j-i==tmp){
total+=*(*(ptr+i)+j);
}
}
}
tmp--;
cout << "Sum of diagonal is: " << total << endl;
total=0;
}
return 0;
}
Объяснение кода листинга программы
В этом коде пользователь вводит размер матрицы (n), после чего программа создает матрицу (2D-массив) размером n x n и заполняет ее значениями из ввода пользователя. Затем программа ищет сумму элементов главной диагонали (т.е. элементов, расположенных на диагонали от верхнего левого угла до нижнего правого угла) и добавляет ее к общему значению, если элемент положительный. Если элемент отрицательный или ноль, то программа переходит к следующему элементу, игнорируя текущий. После заполнения матрицы программа выводит ее на экран, а затем выводит суммы элементов главной диагонали. Код также проверяет разность между индексами элементов диагонали, и если она постоянна, то вычисляет сумму элементов диагонали с этой разностью. В конце программа выводит сумму всех элементов главной диагонали.