C++ Hackerrank Day 11:2D Arrays

Link: https://www.hackerrank.com/contests/30-days-of-code/challenges/day-11-more-review
Chương trình như thế này:

#include <vector>
#include <iostream>
using namespace std;
int main(){
    int arr[6][6];
    std::vector <int> sum;
    int i,j,max=0;
    for(int i=0;i<6;i++)
    {
        for(int j=0;j<6;j++)
        {
            cin >> arr[i][j];
        }
    }
    for(i=0;i<4;i++)
    {
        for(j=0;j<4;j++)
        {
        sum.push_back(arr[i][j]+arr[i][j+1]+arr[i][j+2]+arr[i+1][j+1]+arr[i+2][j]+arr[i+2][j+1]+arr[i+2][j+2]);
    }
    }
    sort(sum.begin(),sum.end());
    cout << *(sum.end()-1);
    return 0;
}

Ở dòng cout << *(sum.end()-1):tại sao phải dùng sum.end()-1 thì mới ra đúng kết quả,còn sum.end() thì chương trình xuất kết quả là 0.

int main(){
    int arr[6][6];
    int i,j,a,b,sum=0,max=0;
    for(int i=0;i<6;i++)
    {
        for(int j=0;j<6;j++)
        {
            cin >> arr[i][j];
        }
    }
    for(i=0;i<4;i++)
    {
        for(j=0;j<4;j++)
        {
            sum=0;
        sum=arr[i][j]+arr[i][j+1]+arr[i][j+2]+arr[i+1][j+1]+arr[i+2][j]+arr[i+2][j+1]+arr[i+2][j+2];
        if(sum>max|| i == 0 && j == 0)
            max=sum;
    }
    }
    cout << max;
    return 0;
}

Mình phải dùng i == 0 && j == 0,nếu không có nó thì 2 case đưa ra kết quả sai.Các bạn giúp mình với,cảm ơn nhiều.

Đề bài: Cho pattern “đồng hồ cát” (nó giống chữ I hơn - ND) có hình dạng như sau:

? ? ?
X ? X
? ? ?

Ma trận 6*6 gồm 16 pattern như vậy. Tính tổng lớn nhất của một pattern, với đk các phần tử có trị tuyệt đối ko qúa 9.


Đoạn 1: Thực ra lấy max (hay thứ j) thì chẳng cần sort làm gì, có std::max_element :slight_smile: nhưng mà end() là không có dữ liệu đâu.
Đoạn 2: max gán bằng 0 là không đúng, theo đề bài thì set max = -9*7 thôi.

2 Likes

Thứ 1:Mình dùng .begin() và .end() vì mình muốn thử tính năng sort
Mình hỏi ngu tí:tại sao end() lại không có dữ liệu,mình nghĩ nó trỏ đến phần tử cuối cùng của vector
Thứ 2 mình đã hiểu,cảm ơn bạn nhiều

http://en.cppreference.com/w/cpp/container/vector/end

Phần tử cuối cùng của vector là phần tử ngay trước end().

1 Like

Cảm ơn 2 bạn nhiều,mình đã rõ.

Thực ra std::max_element() dạng hai tham số cú pháp cũng tương tự thôi. Khi nào cần thứ tự đặc biệt (thay vì dùng op) thì mới thấy hết khả năng của hàm std::sort().

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?