01/10/2018, 00:49

Các bác giúp e vs e kb sai ở đâu luôn :(

main()
{
	int A[100];
	int N;
	cout<<"Nhap N ";cin>>N;
	for(int i=1;i<=N;i++)
	{
		cout<<"Nhap A["<<i<<"] = ";
		cin>>A[i];
	}
	cout<<"Day vua nhap la : ";
	for(int i=1;i<=N;i++)
	{
		cout<<A[i]<<" ";
	}
	cout<<"Sap xep day giam dan ";
	int temp;
	for(int i=1;i<=N;i++)
	{
		if (A[i]<A[i+1])
		{
			temp=A[i];	
			A[i]=A[i+1];
			A[i+1]=temp;	
		}	
	}
	for(int i=1;i<=N;i++)
        cout<<" "<<A[i];
}
Sáng Béo viết 02:49 ngày 01/10/2018
for(int i=1;i<=N;i++)
	{
		if (A[i]<A[i+1])
		{
			temp=A[i];	
			A[i]=A[i+1];
			A[i+1]=temp;	
		}	
	}
  • Thứ nhất: chỗ này trong vòng lặp có gọi đến A[i+1] mà khi i chạy đến N thì A[i+1] không xác định. có thể là gía trị ngẫu nhiên trong bộ nhớ.
  • Thứ hai: Sau khi chạy xong vòng lặp này thì bạn mới chỉ đưa được số nhỏ nhất về cuối dãy. Cần có 2 vòng lặp để đưa tất cả các phần tử về đúng vị trí tăng dần.
for(int i=1; i<=N-1; i++)
{
  for(int j=i+1; j<=N; j++)
  {
    if (A[i]<A[j])
		{
			temp=A[i];	
			A[i]=A[j];
			A[j]=temp;	
		}
  }
}
Bài liên quan
0