Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 12 kết quả

Đề tài: tìm số lớn và nhỏ thứ 2 trong dãy

  1. #1
    Ngày gia nhập
    07 2017
    Bài viết
    14

    Mặc định tìm số lớn và nhỏ thứ 2 trong dãy

    mình tìm dc số lớn thứ 2 còn số nhỏ thứ 2 toàn ra 0
    Code:
    #include<stdio.h>
    int MIN2(int a[],int n){
    	int min;
    	for (int i=0; i<n;i++)
      	if (min>a[i]) min = a[i];
      	int min2;
     	for(int i=0;i<n;i++)
     	if(min2>a[i] && min<a[i]) min2=a[i];
      	return min2; 
    }
    int MAX2(int a[],int n){
     int max;
     for(int i=0;i<n;i++)
     if(a[i]>max) max=a[i];
     int max2;
     for(int i=0;i<n;i++)
     if(a[i]>max2 && a[i]<max) max2=a[i];
     return max2; 
    }
    int main(){ 
     int a[100],n;
     scanf("%d",&n);
      	for(int i=0;i<n;i++)
    	scanf("%d",&a[i]);
     printf("%d %d",MAX2(a,n),MIN2(a,n));
     return 0;
     
    }

  2. #2
    Ngày gia nhập
    01 2013
    Bài viết
    1,469

    Hai bài đều sai, chẳng qua đúng với test của bạn thôi: Bạn chưa khởi tạo.

    Có thể khởi tạo max1 và max2 ngay từ đầu.

  3. #3
    Ngày gia nhập
    07 2017
    Bài viết
    14

    ví dụ giúp mình dc ko. mà ko hiểu sao cái số lớn thứ 2 mình test thử đều đúng

  4. #4
    Ngày gia nhập
    06 2017
    Bài viết
    40

    hiểu sai vấn đề. Wait ....

  5. #5
    Ngày gia nhập
    10 2011
    Bài viết
    552

    Sau khi sửa lỗi mà prog10 đã report thì làm tiếp thử request này được ko nhé:
    1)Cải tiến thuật toán: Cùng 1 đề trên mà chỉ dùng 1 vòng lặp thôi, ko dùng 2 vòng lặp.
    2)Mở rộng bài toán: Tìm Min thứ 3 .. , min thứ 4, .. min thứ .. N (N là giá trị đầu vào).
    Um Mani Padme Hum...!!

  6. #6
    Ngày gia nhập
    01 2013
    Bài viết
    1,469

    Mặc định tìm số lớn và nhỏ thứ 2 trong dãy

    ^ Min thứ k chắc làm cách khác

  7. #7
    Ngày gia nhập
    02 2016
    Bài viết
    259

    Đề bài còn thiếu điều kiện trường hợp không có số nhỏ/lớn thứ 2 thì sao?

  8. #8
    Ngày gia nhập
    06 2017
    Bài viết
    40

    Code:
    int MIN2(int a[],int n)
    {
    	int min = a[0], min2 = a[1];	//khởi động min, khai báo min2 tại đây
    	for (int i=1; i<n;i++)          //sửa i=1 để giảm đc 1 bước. Không sửa cũng chạy đc
      		if (min>a[i]) 
    		{
    			min2 = min;	//thêm min2 tại đây
    			min = a[i];
    		}
      	
     	for(int i=0;i<n;i++)
     		if(min2>a[i] && min<a[i])
    			min2=a[i];
      	return min2; 
    }
    int MAX2(int a[],int n)
    {
     int max = a[0], max2 = a[1];		//khởi động max, khai báo max2 tại đây
     for(int i=1;i<n;i++)          //sửa i=1 để giảm đc 1 bước. Không sửa cũng chạy đc
     if(a[i]>max)
    {
    		max2 = max;	//thêm max2 tại đây
    		max=a[i];
     }
     for(int i=0;i<n;i++)
    	if(a[i]>max2 && a[i]<max)
    		max2=a[i];
     return max2; 
    }
    Đã được chỉnh sửa lần cuối bởi quangvinh2k8 : 11-08-2017 lúc 06:02 PM.

  9. #9
    Ngày gia nhập
    02 2016
    Bài viết
    259

    Code:
    #define MAXVAL 32767
    // (thay bằng cái gì cũng được, miễn là số rất lớn)
    
    int BeThu2(int a[], int n)
    {
    int be1 = be2 = MAXVAL;
    for (int i = 0; i < n; i++)
    {
      if (a[i] < be1)
      {
        be2 = be1;
        be1 = a[i];
      }
      else if (a[i] < be2 && a[i] != be1) be2 = a[i];
    }
    return be2;
    }
    
    // trong hàm main
    
    int be2 = BeThu2(a, n);
    if (be2 < MAXVAL) printf("số bé thứ 2 là: %d", be2); else printf("không có số bé thứ 2");

  10. #10
    Ngày gia nhập
    10 2011
    Bài viết
    552

    ^
    Bài trên khá ổn rồi tuy nhiên cải tiến 2 điểm sau
    1)Nghĩ đến việc đừng dùng tới label MAXVAL nữa
    2)Trường hợp có 2 số = nhau cùng là bé nhất thì không được tính là số bé thứ 2 sao?
    Hay là phải 2 số khác biệt nhau mới tính?
    Um Mani Padme Hum...!!

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn