VT08 - Biến đổi mảng 1 chiều

Xem dạng PDF

Gửi bài giải

Điểm: 1,00 (OI)
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 256M

Tác giả:
Dạng bài
Ngôn ngữ cho phép
C, C#, C++, Go, Java, Pascal, Perl, PHP, Python, Ruby, Rust, Scratch, Swift

Cho mảng ~A~ bao gồm ~n~ số nguyên nhập từ bàn phím. Hãy viết chương trình biến đổi mảng theo quy tắc sau:

  • Tại các chỉ số lẻ của mảng, tăng giá trị của phần tử đó thêm 1 lượng đúng bằng chênh lệch 2 phần tử lân cận của nó.
  • Trong trường hợp không có lân cận trái hoặc phải, coi như lân cận bị thiếu đó có giá trị là 0.
  • Chỉ số mảng được tính bắt đầu từ 0

Giải thích:

  • Phần tử lân cận trái của ~A_i~ là ~A_{i-1}~, với ~i > 0~
  • Phần tử lân cận phải của ~A_i~ là ~A_{i+1}~, với ~i < n - 1~

Input

  • Dòng đầu tiên là số nguyên dương ~n~
  • Dòng tiếp theo là ~n~ số nguyên tương ứng là các phần tử của mảng ~A~

Trong đó

  • ~n \le 10^4~
  • ~|A_{ij}| \le 10^8~

Output

Mảng sau khi đã biến đổi theo quy tắc, các phần tử cách nhau 1 dấu cách.

Sample

Input #1
4
1 3 2 5
Output #1
1 4 2 7

Bình luận

Hãy đọc nội quy trước khi bình luận.



  • 0
    lechinhhc  đã bình luận lúc 11, Tháng 4, 2024, 4:31

    bao ac

    include "iostream"

    include <stdio.h>

    include <bits/stdc++.h>

    using namespace std; typedef long long ll; ll m = -1000000000000; ll n; bool check = true; int main() { ios::syncwithstdio(false); cin.tie(nullptr);cout.tie(nullptr); cin >> n; ll mang[n]; for(ll i = 0; i < n; i++) { cin >> mang[i]; } for(ll i = 0; i < n-1; i++) { if(i%2 != 0) cout << mang[i]+abs(mang[i-1]-mang[i+1]) << " "; else cout << mang[i] << " "; } if((n-1)%2 != 0) cout << mang[n-1]+mang[n-2] << " "; else cout << mang[n-1] << " "; }


  • -1
    tienphat2101  đã bình luận lúc 15, Tháng 3, 2024, 14:10

    Này mình viết theo phong cách của mình thôi nên bạn nào tham khảo thì tham khảo nhé! AC hết nhé!

    include <bits/stdc++.h>

    using namespace std; void solve(){ int n; cin >> n; vector<int> arr; for(int i=0;i<n;i++){ int x; cin >> x; arr.pushback(x); } arr.pushback(0); for(int i=1;i<n;i+=2){ arr[i]+=abs(arr[i-1]-arr[i+1]); } for(int i=0;i<n;i++){ cout << arr[i] << " "; } } int main(){ solve(); }


  • 0
    thangok  đã bình luận lúc 11, Tháng 2, 2024, 14:03
    • Khá là dễ nha mấy ae *

      include<bits/stdc++.h>

    using namespace std; int main() { int n; cin>>n; int a[n]; for(int i=0;i<n;i++) cin>>a[i]; for(int i=0;i<n-1;i++){ if(i%2!=0) { int p=abs(a[i-1]-a[i+1]); a[i]+=p; } } if((n-1)%2!=0) a[n-1]+=a[n-2]; for(int i=0;i<n;i++) cout<<a[i]<<" "; return 0; }


    • 1
      hieugiangho2015  đã bình luận lúc 13, Tháng 2, 2024, 2:17
      1. code lằng nhằng thế v đủ AC r

      include <bits/stdc++.h>

      define ll long long

      using namespace std; void init(ll a[], ll n){ for(int i = 0 ; i < n; i++){ cin>>a[i]; } } void sol(ll a[], ll n){ for(int i = 0 ; i < n; i++){ if(i%2!=0){ a[i] += abs(a[i-1] - a[i+1]); } } }

      int main() { ll a[100000] = {0}; ll n; cin>>n; init(a,n); sol(a,n); for(int i = 0 ;i < n; i++){ cout<<a[i]<<" "; } return 0; }


  • 2
    ChauCao  đã bình luận lúc 25, Tháng 12, 2023, 5:31

    include <bits/stdc++.h>

    using namespace std; vector<int> trans(const vector<int>& a) { int n = a.size(); if (n <= 1) { return a; }

    vector<int> res = a;
    for (int i = 1; i < n; i += 2) {
        int left = (i - 1 >= 0) ? a[i - 1] : 0;
        int right = (i + 1 < n) ? a[i + 1] : 0;
        int differ = abs(right - left);
        res[i] += differ;
    }
    
    return res;
    

    }

    int main() { int n; cin >> n;

    vector<int> a(n);
    for (int i = 0; i < n; ++i) {
        cin >> a[i];
    }
    vector<int> nres = trans(a);
    for (int i : nres) {
        cout << i << ' ';
    }
    
    return 0;
    

    }


  • 0
    kitajima2910  đã bình luận lúc 25, Tháng 12, 2023, 5:26

    Đã AC, Java 8+ các bạn tham khảo, nếu thấy hay up vote cho mình nhé :D

    import java.util.ArrayList;
    import java.util.List;
    import java.util.Scanner;
    
    /**
     *
     * @author Kitajima2910
     */
    public class VT08 {
    
        public static void main(String[] args) {
    
            try (Scanner s = new Scanner(System.in)) {
    
                int n = s.nextInt();
    
                List<Integer> store = new ArrayList<>();
    
                for (int i = 0; i < n; i++) {
                    store.add(s.nextInt());
                }
    
                for (int i = 1; i < n; i += 2) {
                    int left = (i - 1 >= 0) ? store.get(i - 1) : 0;
                    int right = (i + 1 < n) ? store.get(i + 1) : 0;
                    int diff = Math.abs(left - right);
                    store.set(i, store.get(i) + diff);
                }
    
                store.forEach(e -> System.out.print(e + " "));
    
            }
        }
    
    }
    

  • -3
    Duyduy  đã bình luận lúc 26, Tháng 11, 2023, 1:24

    Cho minh hoi la tai sao cai test cua de bai no khong bien doi gia tri 1 vay. Mot cung la so le ma.


    • 0
      thh  đã bình luận lúc 21, Tháng 1, 2024, 4:40

      Mọi chỉ số trong mảng có vị trí bắt đầu từ 0 bạn nhé.Đề bài yêu cầu là biến đổi số ở vị trí lẻ chứ ko phải là biến đổi số lẻ nha bạn :)


      • 0
        lehongduc  đã bình luận lúc 23, Tháng 3, 2024, 6:00

        cảm ơn đã gợi ý:v đọc nhầm


    • -2
      tungkq123  đã bình luận lúc 29, Tháng 11, 2023, 5:19

      vi tri trong mang bat dau tu 0 ma


      • 0
        ngtuananh  đã bình luận lúc 18, Tháng 12, 2023, 12:13

        ban giai thich chi tiet hon dc ko aj


        • 0
          thh  đã bình luận lúc 21, Tháng 1, 2024, 4:47 sửa 3

          Chi tiết hơn là thế này né:

          mảng:1 3 2 5

          vị trí : 0 1 2 3

          ở đây cta biến đổi phần tử có vị trí lẻ nha cậu

          Tức là biến đổi số 3 và số 5


          • 1
            ngtuananh  đã bình luận lúc 29, Tháng 1, 2024, 12:24

            mik cam on aj


  • -2
    huyhoang190605  đã bình luận lúc 24, Tháng 11, 2023, 11:29

    def transform_array(arr): n = len(arr) if n <= 1: return arr

    result = arr.copy()
    for i in range(1, n, 2):
        left_neighbor = arr[i - 1] if i - 1 >= 0 else 0
        right_neighbor = arr[i + 1] if i + 1 < n else 0
        diff = abs(right_neighbor - left_neighbor)
        result[i] += diff
    
    return result
    

    n = int(input()) a = list(map(int, input().split())) a = transform_array(a) for i in a: print(i, end=' ')


  • -6
    hal2332004  đã bình luận lúc 16, Tháng 10, 2023, 3:45

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


  • -8
    phanminhh  đã bình luận lúc 15, Tháng 7, 2023, 14:26

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


    • 0
      thh  đã bình luận lúc 21, Tháng 1, 2024, 4:42

      Vì vị trí bắt đầu từ 0 nên số 1 có vị trí là 0 còn số 2 có vị trí là 2 bạn nhé