Đánh giá, nhận xét, review các công ty tuyển dụng
Trang 1 trên tổng số 3 123 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 24 kết quả

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

  1. #1
    Ngày gia nhập
    04 2010
    Bài viết
    2

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

    đề: nhập vào 1 dãy số thực ,tìm số lớn thứ 2 trong dãy.
    sau khi tìm được max 1 thì không biết gán max 2 bằng gì nhỉ ai sửa hộ em;
    nếu gán như em thì khi max1= max2=0 thì sai mất ,với lại không hiêu sao khởi động hơi lâu
    C Code:
    1. #include<stdio.h>
    2. void Nhap_mang(float a[],int n)
    3. {
    4.     int i;
    5.     for(i=0;i<n;i=i+1)
    6.     {
    7.         printf("\na[%d]= ",i);
    8.         scanf("%f",&a[i]);
    9.     }
    10. }
    11.  
    12.  
    13. main()
    14. {
    15.     float a[100],max1,max2;
    16.     int n,i,j,k=0,stt=0;
    17.     printf("\nNhap vao mot day so thuc");
    18.     printf("\nNhap so phan tu cua day so n= "); scanf("%d",&n);
    19.     Nhap_mang(a,n);
    20.     max1=a[0];
    21.     for(i=0;i<n;i=i+1)
    22.     {
    23.         if(a[i]>max1)
    24.             max1=a[i];
    25.     }
    26.         max2=0;
    27.     for(i=0;i<n;i=i+1)
    28.     {
    29.         if(a[i]>max2 && a[i]!=max1)
    30.         {
    31.             max2=a[i];
    32.             stt=i+1;
    33.         }
    34.        }
    35.        printf("\nSo co gia tri lon thu hai la: %5.3f",max2);
    36.        printf("\nSo do dung thu %d trong day",stt);
    37.    
    38.        getch();
    39. }
    ps: sorry tadius lần sau e rút kn
    Đã được chỉnh sửa lần cuối bởi KidSunny : 09-05-2010 lúc 06:20 PM.

  2. #2
    Ngày gia nhập
    04 2010
    Bài viết
    2

    thôi e sửa được rồi.thay max2 thành:
    C Code:
    1. if(max1==a[0])
    2.         max2=a[1];
    3.     else max2=a[0];

  3. #3
    Ngày gia nhập
    01 2011
    Bài viết
    34

    Cả nhà sửa giúp mình nha!
    Mình in kết quả không đúng
    C Code:
    1. //Chuong trinh tim so lon thu 2 trong day
    2.  
    3. #include<stdio.h>
    4. #include<conio.h>
    5. #include<stdlib.h>
    6.  
    7. //ham nhap mang
    8. int nhap(int a[],int n);
    9. //ham in mang
    10. int in(int a[],int n);
    11. //----------------------
    12. //Ham main
    13. //------------------
    14. main (void)
    15. {
    16.    int i,j,n,a[100],max,max2;  
    17.    printf("day gom so phan tu n=");
    18.    scanf("%d",&n);
    19.    printf("\n nhap day so:\n");
    20.    nhap(a,n);
    21.    system("CLS");
    22.    printf("\n day so vua nhap la:\n");
    23.    in(a,n);
    24.    max=a[0];
    25.    for (i=1;i<n;i++){
    26.        if (a[i]>max){
    27.            max=a[i];
    28.        }
    29.    }
    30.    max2=a[0];
    31.    for (i=1;i<n-1;i++){
    32.        for (j=i+1;j<n;j++){
    33.            if (a[i]<a[j] && a[j]<max){
    34.               max2=a[j];
    35.            }
    36.        }
    37.    }
    38.    printf("\n so lon thu 2 trong day la:%d",max2);
    39.    getch();
    40. }
    41. //dn ham nhap mang
    42. int nhap(int a[], int n)
    43. {
    44.    int i;
    45.    for (i=0;i<n;i++){
    46.        printf("a[%d]=",i);
    47.        scanf("%d",&a[i]);
    48.    }
    49. }
    50. //dn ham in mang
    51. int in(int a[],int n)
    52. {
    53.     int i;
    54.     for (i=0;i<n;i++){
    55.         printf("%5d",a[i]);
    56.     }
    57. }

  4. #4
    Ngày gia nhập
    03 2010
    Nơi ở
    Nơi nào đó trong vũ trụ
    Bài viết
    550

    Sao lại phải cần đến 2 vòng lặp để tìm max2 ?
    Mình nghĩ chỉ cần 1:
    C Code:
    1.     max2=a[0];
    2.     for (i=0;i<n;i++)
    3.             if (max2 < a[i] && a[i] != max)
    4.                 max2=a[i];
    Gió thu lạnh lẽo hắt hiu lòng!

  5. #5
    Ngày gia nhập
    09 2010
    Nơi ở
    Linux-Ubuntu
    Bài viết
    217

    bài này thì mình nghĩ cứ cho 1 hàm sắp xếp theo chiều ko giảm;
    rồi tiếp đó xét tiếp 1 hàm max2(....);
    trong hàm này giá trị max1 sẽ gán cho phần từ cuối cùng, xét từ cuối mảng đến đầu mảng, nếu phần tử sau thoả mãn khác max1 là ok, xuất ra giá trị
    ++Sự Học Không Bao Giờ Là Muộn++
    ---Sướng Thì Ta Làm, Thích Thì Sẽ Được---
    ......Đôi khi bỏ học cũng là một bước đột phá...

    ***HỘI NHỮNG NGƯỜI PHÁT CUỒNG VÌ LINUX***

  6. #6
    Ngày gia nhập
    08 2010
    Nơi ở
    Moscow, Russia Federation
    Bài viết
    913

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

    This is my way using stl to resolve this problem. As first, I just found the maximum value in the range, then deleted all equal to him elements. In finish, I have to find the maximum value in the end range. The found value is the second maximum value.
    C++ Code:
    1. #include <iostream>
    2. #include <vector>
    3. #include <algorithm>
    4. #include <iterator>
    5. #include <functional>
    6.  
    7. #include <ctime>
    8.  
    9. typedef std::vector<int> IntVect;
    10. typedef std::ostream_iterator<int, char, std::char_traits<char> > OstreamIterator;
    11. struct random {
    12.     random(int rg) : range(rg) {}
    13.     int operator() () {
    14.         return rand() % range;
    15.     }
    16. private:
    17.     int range;
    18. };
    19.  
    20. int main () {
    21.     //
    22.     srand (unsigned ( time (NULL)));
    23.  
    24.     // create an array resizing to 20 elements
    25.     IntVect vect(15);
    26.  
    27.     // generate randomly values to array
    28.     random rnd(10);
    29.     std::generate(vect.begin(), vect.end(), rnd);
    30.  
    31.     // an ostream iterator that outputs an
    32.     // integer to cout, terminated by a comma
    33.     OstreamIterator OstIt(std::cout, ",");
    34.  
    35.     // print the array
    36.     std::cout << "{";
    37.     std::copy(vect.begin(), vect.end(), OstIt);
    38.     std::cout << "\b" << "}" << std::endl;
    39.  
    40.     // find the first max value
    41.     int max_val = *max_element(vect.begin(), vect.end());
    42.     std::cout << "The max element " << max_val << std::endl;
    43.     vect.erase(std::remove(vect.begin(), vect.end(), max_val), vect.end());
    44.  
    45.     // print the finished array
    46.     std::cout << "{";
    47.     std::copy(vect.begin(), vect.end(), OstIt);
    48.     std::cout << "\b" << "}" << std::endl;
    49.  
    50.     // find the second max value
    51.     max_val = *max_element(vect.begin(), vect.end());
    52.     std::cout << "The second max value " << max_val << std::endl;
    53.  
    54.     return 0;
    55. }
    Mời các bạn ghé thăm blog cá nhân của tôi

  7. #7
    Ngày gia nhập
    09 2010
    Nơi ở
    Linux-Ubuntu
    Bài viết
    217

    đây là bài mình: chưa kiểm tra đc bạn nào kiểm tra hộ nhé:
    PHP Code:
    #include <stdio.h>
    #define MAX 100
    int main(){
      
    int array[MAX];
      
    int size;

      
    printf("Nhap so phan tu cua mang: ");
      
    scanf("%d",&size);
      
    NhapMang(array,size);
      
    int max2 Max2(array,size);
      
      
    printf("gia tri max thu 2 la: %d\n",max2);
      return 
    0;
    }

    void NhapMang(int *arrint size){
      
    int i;
      for(
    i=0;i<size;i++){
        
    printf("a[%d]: ",i+1);
        
    scanf("%d",&arr[i]);
      }
    }
    void Swap(int *aint *b){
      
    int tmp = *a;
      *
    a=*b;
      *
    b=tmp;
    }

    void SapXep(int *arrint size){
      
    int i,j;
      for(
    j=size-1;j>=0;i--)
        for(
    i=0;i<size;i++)
          if(
    arr[i]>arr[i+1])
        
    Swap(&arr[i],&arr[i+1]);
    }

    int Max2(int *arrint size){
      
    int i;
      
    SapXep(arr,size);
      
    //in ra mang da sap xep
      
    for(i=0;i<size;i++)
        
    printf("%2d",arr[i]);
      
    printf("\n");
      
    //tim max 2
      
    int max1=arr[size-1];

      for(
    i=size-2;i>=0;i--)
        if(
    arr[i]!= max1){
          return 
    arr[i];
          break;
        }

    ++Sự Học Không Bao Giờ Là Muộn++
    ---Sướng Thì Ta Làm, Thích Thì Sẽ Được---
    ......Đôi khi bỏ học cũng là một bước đột phá...

    ***HỘI NHỮNG NGƯỜI PHÁT CUỒNG VÌ LINUX***

  8. #8
    Ngày gia nhập
    03 2010
    Nơi ở
    Nơi nào đó trong vũ trụ
    Bài viết
    550

    Còn đây là của birthis, đú theo :
    C Code:
    1. /*
    2. ****************************************************************************
    3. File: FindMax2.cpp
    4. Author: birthis
    5. Email:
    6. Date: 09/01/2011
    7. Description: Chuong trinh tim so lon thu 2 trong mang nhap vao
    8. ****************************************************************************
    9. */
    10. #include <stdio.h>
    11. #include <conio.h>
    12.  
    13. int getMax2(int a[],int n);
    14.  
    15. int main()
    16. {
    17.     int a[100],n;
    18.  
    19.     printf("\nChuong trinh tim so lon thu 2 trong mang.");
    20.     //Nhap du lieu
    21.     printf("\nNhap vao n: ");
    22.     fflush(stdin);
    23.     scanf("%d",&n);
    24.  
    25.     printf("\nNhap mang:");
    26.     for (int i=0;i<n;i++)
    27.     {
    28.         printf("\na[%d]= ",i);
    29.         fflush(stdin);
    30.         scanf("%d",a+i);
    31.     }
    32.  
    33.     //In ket qua
    34.     printf("\nMang vua nhap: ");
    35.     for (int i=0;i<n;i++)
    36.     {
    37.         printf("%d   ",a[i]);
    38.     }
    39.  
    40.     //Gia tri lon thu 2
    41.     printf("\nGia tri lon thu 2: %d",getMax2(a,n));
    42.  
    43.     fflush(stdin);
    44.     getch();
    45.  
    46. }
    47. /*
    48. Ten ham : getMax2
    49. Muc dich: Tim phan tu lon thu 2 cua mang
    50. Dau vao : - Mang so nguyen a
    51.           - So luong phan tu n cua mang a
    52. Dau ra  : - Tra ve max2
    53. */
    54. int getMax2(int a[],int n)
    55. {
    56.     int max1,max2;
    57.     if (n <= 0)
    58.     {
    59.         printf("\nLam gi co phan tu nao dau ma tim ^^");
    60.         return 0;
    61.     }
    62.     else if (n == 1)
    63.     {
    64.         printf("\nKhong co max2 chi co max1 ^^");
    65.         return 0;
    66.     }
    67.     else
    68.     {
    69.         max1=max2=0x80000000;
    70.         for (int i=0;i<n;i++)
    71.         {
    72.             if (max1<a[i])
    73.             {
    74.                 max2 = max1;
    75.                 max1 = a[i];
    76.             }
    77.             else if (max2<a[i] && a[i]<max1)
    78.             {
    79.                 max2 = a[i];
    80.             }
    81.         }
    82.         return max2;
    83.     }
    84.    
    85. }
    Gió thu lạnh lẽo hắt hiu lòng!

  9. #9
    Ngày gia nhập
    08 2010
    Nơi ở
    http://gocnhinthoidai.blogspot.com
    Bài viết
    52

    Red face thanks!

    haizz... may quá mĩnh cũng đang tìm bài nè. đọc xem cách nào hay, nhanh nhất nào

  10. #10
    Ngày gia nhập
    04 2009
    Nơi ở
    Gầm cầu
    Bài viết
    2,230

    @chủ topic: anh thấy em thừa 1 vòng for
    khi em gán cho max1 thì gán max1 cũ cho max2 là ok rồi

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