In phần tử lớn nhất nhỏ nhất trong mảng và in ra mảng đó sau khi đổi chỗ 2 phần tử lớn nhất nhỏ nhất với nhau

mọi người xem thử code mình có sai ở đâu không. Kiểm tra ko có error nhưng khi chạy ra không đúng

#include<stdio.h>
int Max(int a[], int n)
{
	int max=a[0],jm;
	for ( int j=0;j<n;j++)
		if(max<=a[j])
			{
			max=a[j];
			jm=j;
			}
		return jm-1;
}
int Min(int a[], int n)
{
	int min=a[0],km;
    for(int k=0;k<n;k++)
    {
        if(a[k]<=min )
            min=a[k];
			km=k;
		}
		return km-1;
}
void hoandoi(int a, int b)
{
	int t;
	t=a;
	a=b;
	b=t;
}

void main()
{	
	int n;
	int a[100];
	scanf("%d",&n);
	for(int i=0;i<n;i++)
		scanf("%d",&a[i]);
	int x =	Max(a,n);
	int y = Min(a,n);
	printf("phan tu lon nhat la %d.\n",x);
	printf("phan tu nho nhat mang la %d.\n",y);
		hoandoi(a[x],a[y]);
	for( i=0;i<n;i++)
		printf("%d",a[i]);
}

Index đã đếm từ 0 rồi, việc gì phải trừ 1 ở index đã lưu nữa?

Lưu ý:

  • Dùng int main() thay vì void main().
  • Không nên đặt tên biến là min, max.

bạn ơi cái hàm min của mình có sai không sao tìm max thì đúng nhưng min thì sai

Bạn thử bộ input

7
3 9 2 4 5 1 8

xem in ra gì.

hàm max thì in ra phần tử lớn nhất là đúng nhưng còn min thì lúc nào nó cũng in ra cái cuối cùng và hàm hoán đổi của mình nó cũng không hoán đổi được 2 phần tử

Phải nạp vào tham chiếu/con trỏ.

void(int &a, int &b) p ko bạn. Còn hàm min của mình có bị lỗi gì không sao nó cứ in ngay phần tử cuối

Nếu bạn code C++ thì phải.

Thế tóm lại bạn code C hay C++?

mình code c. Nhưng khi thêm &a, &b vào thì giá trị dc trả về nên đổi vị trí được cho nhau

Câu này không có trong C. Trong C chỉ có mỗi void(int*, int*) và gọi hàm thì dùng &.

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