Đề bài: nhập vào mảng có n phần tử và số k, xuất ra các phần tử có số dư khi chia cho k tăng dần

#include<iostream>
#include<vector>
using namespace std;
int main(){
    int n, k;
    cin >> n >> k;
    int a[n];
    vector<vector<int>> v;
    for(int i=0; i< n; i++){
        cin >> a[i];
        int t=a[i]%k;
        v[t].push_back(a[i]);
    }
    for(int i=0; i<n; i++){
        for(int j=0; j<v[i].size(); j++){
            cout << v[i][j] << " ";
        }
    }
    return 0;
}

Vector ban đầu rỗng không nên chưa thể truy nhập chỉ số được.

Constructor (3) sẽ phù hợp với tình huống này:
https://en.cppreference.com/w/cpp/container/vector/vector

4 Likes

Mình hiểu đề bài thế này: n phần tử của mảng là a1, a2,…, an có các số dư lần lượt k1,k2,…,kn. In ra mảng theo thứ tự sắp xếp tăng dần của k1, k2,…,kn.

Theo mình thì có thể làm thế này:

#include<iostream>
#include<string>
#include<unordered_map>
#include<algorithm>

using namespace std;
struct Elem
{
	int val;
	int rem;

	bool operator <(Elem& m) { return (rem < m.rem); }
};

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

	vector<Elem> v;
	v.resize(n);

	for (int j = 0; j < n; j++)
	{
		cin >> v[j].val;
		v[j].rem = v[j].val % k;
	}

	sort(v.begin(), v.end());

	for (int j = 0; j < n; j++) cout << v[j].val << " ";
	return 0;
}

Bạn dùng nhiều ô nhớ quá : D.

Các input mình đã thử:

5 2
14 13 23 47 8

6 3
10 15 2 11 7 4

6 4
16 7 6 9 5 4 18

3 Likes

cảm ơn bạn, mình mới dùng vector nên cũng chưa thạo lắm :Đ

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