01/10/2018, 09:59

C++ Các bác chỉ lỗi sai chương trình này giúp em với

cho 1 vector ,xóa phần tử chia hết cho k
ví dụ
cho inputArray = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] và k = 3
kết quả là [1, 2, 4, 5, 7, 8, 10].
nhưng khi inputArray =[1,1,1,1] and k=1 thì ra [1].

std::vector<int> extractEachKth(std::vector<int> inputArray, int k) {
    int n=inputArray.size();
    
        for(int i=0;i<n;i++)
            if(inputArray[i]%k==0)
            {
                for(int ii=i;ii<n-1;ii++)
                    inputArray[ii]=inputArray[ii+1];
                inputArray.pop_back();
                n--;
                i=0;
            }
    return inputArray;

}
Gió viết 12:06 ngày 01/10/2018

Cái này bạn phải nắm rõ vòng lặp for, bởi sau khi bị xóa, i = 0 , câu lệnh cuối của vòng for được thực hiện i++ nên chỉ số bắt đầu từ 1, do đó phải gán lại i=-1 sau khi xóa để chỉ số bắt đầu từ 0

Trần Hoàn viết 12:01 ngày 01/10/2018

Đối với riêng cái đề bài, mình đọc code của bạn thấy khó hiểu.
Mình xin đưa cho bạn 2 ý kiến:

std::vector<int> extractEachKth(std::vector<int> inputArray, int k)
{
	for (int i = inputArray.size() - 1; i >= 0; i -= 1)
		if (inputArray[i] % k == 0)
			inputArray.erase(inputArray.begin() + i);//Xoá phần tử ở vị trí i
	return inputArray;
}
std::vector<int> extractEachKth(std::vector<int> inputArray, int k)
{
	std::vector<int> outputArray;
	for (int i = 0; i < inputArray.size(); i += 1)
		if (inputArray[i] % k != 0)
			outputArray.push_back(inputArray[i]);
	return outputArray;
}
Bài liên quan
0