Tìm và đổi chỗ phần tử lớn nhất với phần tử nhỏ nhất?

Các bạn xem hộ mình bài này với viết chương trình tìm và đổi chỗ phần tử lớn nhất với phần tử nhỏ nhất trong mảng 1 chiều các số nguyên

#include<stdio.h>
#include<conio.h>
#include<math.h>
int main()
{
  int x[10],i,max,min,n,tg;
  printf("nhap so luong phan thu");
  scanf("%d",&n);
  for(i=0;i<n;i++)
  {
    printf("x[%d]",i);
    scanf("%d",&x[i]);
  }
  printf("\nmang x[i] da nhap vao");
  for(i=0;i<n;i++)
  {
    printf("%2d",x[i]);
  }
  max=x[0];
  min=x[0];
  for(i=0;i<n;i++)
  {
     if(x[i]>max)max=x[i];
     if(x[i]<min)min=x[i];
  }
  printf("\ngti lon nhat la %d",max);
  printf("\ngtnn la %d",min);
   {
       tg=min;
       min=max;
       max=tg;
   }
   printf("\nday so da duoc do cho ");
   for(i=0;i<n;i++)
    {printf("%7d",x[i]);}
}

http://codepad.org/r96Ugj2M

Thay vì lấy giá trị bạn hãy lấy chỉ số của max, min

imax=0;
imin=0;
for(i=1;i<n;++i) { 
  if(x[i]>x[imax]) imax=i;
  if(x[i]<x[imin]) imin=i;
}

swap:
 tg=x[imax];
 x[imax]=x[imin];
 x[imin]=tg;

trong đó imax,imin là chỉ số tương ứng max, min

1 Like

cam on ban nha,nhung tai sao chi lay chi so ma khong lay lun phan tu di ban,ban giai thich gium minh voi

Theo mình thì thế này:

  • Trong code của bạn thì bạn chỉ thay đổi 2 giá trị lớn và nhỏ nhất cho nhau, mảng vẫn giữ nguyên
  • Còn chị @Gio thì thay đổi lun cái mảng => khi bạn in mảng kkhúc cuối, thì đó là mảng đã thay đổi vị trí thằng max với thằng min.

Túm váy lại là bạn chỉ in được max, min và thay đổi giá trị 2 thằng. Trong khi đề thì lại bảo thay đổi chỗ, nghĩa là thay đổi vị trí trong mảng => làm theo cách chị @Gio

2 Likes

@nhatlonggunz :man: not :girl: :grimacing:

1 Like

Trời ơi, chị nỡ lòng nào phá nát cả bài diễn văn của em chỉ với 1 từ hả chị @Gio oi

1 Like

bạn ơi cho mình hỏi tại sao i chạy từ 1 chứ không phải từ 0?

giá trị đang xét là vị trí 0 rồi. nên cho chạy từ 1 để khỏi xét chính nó @@

#include <stdio.h>
#include <conio.h>
main()
{
	int i,n,a,b,dem=0,dem1=0;
	int j,t;
	float A[50],x,min,max,B[50],C[50],tong=0;
	printf("Nhap so nguyen duong 1<=n<=50: ");
	do{
		printf("\nn = ");scanf("%d",&n);
		if (n<1||n>50)
		printf("\nSo %d khong hop le: \nNhap lai",n);
	}while(n<1||n>50);
	//Nhap day so thuc
	printf("\nNhap vao day %d So thuc : ",n);
	for (i=0;i<n;i++){
		printf("\nA[%d] = ",i);
		scanf("%f",&A[i]);
	}
	printf("\nDay vua nhap la: ");
	for (i=0;i<n;i++){
		printf("    %g",A[i]);
	}
	max=A[0];
	for (i=0;i<n;i++){
		if (A[i]>max)
		max=A[i];
	}
	printf("\nGia tri phan tu max la: %g",max);
	printf("   O vi tri : ");
	for (i=0;i<n;i++){
		if (max==A[i]){
		printf(" %d",i+1);
	}
	}
	min=A[0];
	for (i=0;i<n;i++){
		if (A[i]<min)
		min=A[i];
	}
	printf("\nGia tri phan tu max la: %g",min);
	printf("   O vi tri : ");
	for (i=0;i<n;i++){
		if (min==A[i])
		printf(" %d",i+1);
	}
	for (i=0;i<n;i++){
		if (A[i]==min)
			a=i;
		if (A[i]==max)
			b=i;
	}
	t=A[a];
	A[a]=A[b];
	A[b]=t;
	

	printf("\n Day sau khi doi cho la : ");
	for (i=0;i<n;i++){
		printf("    %g",A[i]);
	}
	getch();
	return 0;
}

Chuyện gì xảy ra nếu có nhiều phần tử lớn nhất trong mả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?