Определить минимум среди сумм элементов диагоналей, параллельных главной диагонали матрицы - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Дана целочисленная квадратная матрица. Опрделить: 1) сумму элементов в тех строках, которые не содержат отрицательных элементов. 2) минимум среди сумм элементов диагоналей, параллельных главной диагонали матрицы. первую часть сделал, вроде как работает 
#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; 
 }
а вот на второй застопорился, подскажите что к чему) p.s. желательно таким же понятным языком)

Решение задачи: «Определить минимум среди сумм элементов диагоналей, параллельных главной диагонали матрицы»

textual
Листинг программы
#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 и заполняет ее значениями из ввода пользователя. Затем программа ищет сумму элементов главной диагонали (т.е. элементов, расположенных на диагонали от верхнего левого угла до нижнего правого угла) и добавляет ее к общему значению, если элемент положительный. Если элемент отрицательный или ноль, то программа переходит к следующему элементу, игнорируя текущий. После заполнения матрицы программа выводит ее на экран, а затем выводит суммы элементов главной диагонали. Код также проверяет разность между индексами элементов диагонали, и если она постоянна, то вычисляет сумму элементов диагонали с этой разностью. В конце программа выводит сумму всех элементов главной диагонали.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.786 из 5
Похожие ответы