Lỗi process excited after seconds return value

Chào mọi người, em là thành viên mới của diễn đàn và đang học C++ cơ bản ạ. Dưới đây là chương trình quy hoạch động của em: nhập vào số tiền, đếm số tờ tiền nhỏ nhất tạo thành số tiền đó. Chương trình chạy rất tốt với các số <100. nhưng khi em nhập sotien >=100 thì nó ra:

Process excited after 2.857 seconds with return value 3221225477.
Press any key to contnue .  .  .

Số giây thay đổi với các giá trị khác nhưng 3221225477 thì không đổi ạ. Mong các anh chị giải đáp giúp em và góp ý cho em về thuật toán quy hoạch động này với ạ (có thể rút gọn hơn không). Em cảm ơn mọi người ạ.

#include<iostream>
using namespace std;
const int menhgia[]={1,2,5,10,20,50,100}; //mệnh giá các tờ tiền để đổi.
int main()
{
	cout<<"nhap so tien: \n";
	int sotien;cin>>sotien;
	int *ptr=new int [sotien];  
    // mảng lưu số tờ tiền để tạo thành p đồng.
	*ptr=0;
	for(int p=1;p<=sotien;p++)
	{
		int i=p-menhgia[0],min=*(ptr+i),j=1; 
	    while(menhgia[j]<=p)
	    {
	    	i=p-menhgia[j];
	    	if(*(ptr+i)<min)
	    	{
	    		min=*(ptr+i);
			}
			j++;
		}
	*(ptr+p)=min+1;	//min+1 là số tờ tiền nhỏ nhất cần để tạo thành p đồng.
	}
	cout<<"so to tien it nhat la: "<<*(ptr+sotien); 
   // p=sotien là giá trị cần tìm.
return 0;
}

Mã trả về 3221225477 (0xC0000005 - Access Violation) có nghĩa là bạn đang truy xuất vào địa chỉ bị cấm.
Xem sơ qua thì có lẽ bạn đã truy xuất bên ngoài mảng menhgia hoặc ptr rồi.

3 Likes

Thiếu điều kiện cho j.
Và chỗ new phải là sotien+1.

4 Likes

vâng em cảm ơn anh, em sửa lại là sotien+1 mới đúng nhưng xong nó vẫn ra lỗi với giá trị >= 100 với giá trị nhỏ hơn thì chạy đúng rồi

j thì có điều kiện là menhgia[j]<=p rồi ạ

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