Максимална сума

Да се напише програма, която създава правоъгълна матрица с размер (n,m). Размерността и елементите на матрицата да се въвеждат. Да се намери реда, който има максимална сума.

По желание*: Да се намери подматрицата с размер (3,3), която има максимална сума. (Задачата е взета от книгата „Въведение в Java“. Книгата е много добра за въведение в програмиране, има и други интересни задачи).

Публикувано в 11а, 11в с етикети . Постоянна връзка.

2 Responses to Максимална сума

  1. dreanor каза:
    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
        cout<<"Razmer na matricata (x; y): ";
        int x, y;
        cin>>x>>y;
        int matrix[x][y];
        if ((y<3)||(x<3)) cout<<"Nqma podmatrica s razmer 3x3\n";
        else 
        {
            for (int i=0; i<x; i++)
                for (int k=0; k<y; k++)
                    cin>>matrix[i][k];
            int sum, maxsum=matrix[0][0]+matrix[0][1]+matrix[0][2]+matrix[1][0]+matrix[1][1]+matrix[1][2]+matrix[2][0]+matrix[2][1]+matrix[2][2];
            int maxr, maxk;
            for (int r=0; r<x-2; r++)
                for (int k=0; k<y-2; k++){
                    sum=matrix[r][k]+matrix[r][k+1]+matrix[r][k+2]+matrix[r+1][k]+matrix[r+1][k+1]+matrix[r+1][k+2]+matrix[r+2][k]+matrix[r+2][k+1]+matrix[r+2][k+2];
                    if (sum>maxsum) {
                       maxsum=sum;
                       maxr=r;
                       maxk=k;
                    }
                }
            cout<<"Podmatrica s nai-golqma suma:\n";
            for (int r=maxr; r<=maxr+2; r++){
                for (int k=maxk; k<=maxk+2; k++)
                    cout<<matrix[r][k]<<" ";
                cout<<endl;
            }
            cout<<"= "<<maxsum<<endl;
            
        }
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    
    • Данаил каза:

      Браво, Калояне, супер си! Чудя се дали не може още да се оптимизира? Като си помисля, следващата матрица 3х3 ще съдържа последните две колони от предишната матрица + още три числа. Но тъй като достъпът до елементи от масив и събирането не са „скъпи“ (т.е. времеемки) операции, едва ли разликата ще е толкова голяма, а ще се усложни кода.

Вашият коментар