30/09/2018, 16:24

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("
mang 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("
gti lon nhat la %d",max);
  printf("
gtnn la %d",min);
   {
       tg=min;
       min=max;
       max=tg;
   }
   printf("
day so da duoc do cho ");
   for(i=0;i<n;i++)
    {printf("%7d",x[i]);}
}

http://codepad.org/r96Ugj2M

Gió viết 18:30 ngày 30/09/2018

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

Trí Hải Dương viết 18:32 ngày 30/09/2018

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

nhatlonggunz viết 18:27 ngày 30/09/2018

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

Gió viết 18:30 ngày 30/09/2018

@nhatlonggunz not

nhatlonggunz viết 18:35 ngày 30/09/2018

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

viết 18:29 ngày 30/09/2018

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

X viết 18:25 ngày 30/09/2018

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ó @@

Thắng Jr viết 18:33 ngày 30/09/2018
#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;
}
Satou Yami viết 18:31 ngày 30/09/2018

Chuyện gì xảy ra nếu có nhiều phần tử lớn nhất trong mảng???

Bài liên quan
0