Từ 1 tới 7 trên tổng số 7 kết quả

Đề tài: Nhập mảng nguyên sao cho chẵn tăng, lẻ giảm

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

    Mặc định Nhập mảng nguyên sao cho chẵn tăng, lẻ giảm

    Ví dụ mảng sẽ có các phần tử như sau : 2 9 4 7 6 3 1
    Em code thế này mà không biết còn cách nào tối ưu hơn không, mong các pro giúp đỡ

    Code:
    void fnNhapMang(int a[], int n)
    {
        if(n < 1) return;
        for (int i = 0; i < n; i++)
        {
            do
            {
                printf("Nhap a[%d]: ", i + 1);
                scanf(" %d", &a[i]);
            }while((a[i] % 2 == 0 && !fnKT_ChanTang(a, i, a[i])) || (a[i] %2 != 0 && !fnKT_LeGiam(a, i, a[i])));
        }
    }
    
    int fnKT_ChanTang(int a[], int n, int x)
    {
        for(int i = n - 1; i >= 0; i--)
            if(a[i] % 2 == 0 && x < a[i]) return 0; 
        return 1;
    }
    
    int fnKT_LeGiam(int a[], int n, int x)
    {
        for(int i = n - 1; i >= 0; i--)
            if(a[i] % 2 != 0 && x > a[i]) return 0; 
        return 1;
    }

    Nhân tiện các bác cho em hỏi, mảng âm dương xen kẽ có tính cho phép phần tử có giá trị 0 trong đó không.
    Ví dụ: 0 0 -1 3 0 -5 7, mảng này có được xem là mảng âm dương xen kẽ không.
    Đã được chỉnh sửa lần cuối bởi lytieu_long550 : 16-08-2011 lúc 12:43 PM.

  2. #2
    Ngày gia nhập
    08 2010
    Nơi ở
    Đà Nẵng
    Bài viết
    52

    Có vấn đề trong code của bạn mình ko hiểu :[
    C Code:
    1. void fnNhapMang(int a[], int n)
    2. {
    3.     if(n < 1) return;
    4.     for (int i = 0; i < n; i++)
    5.     {
    6.         do
    7.         {
    8.             printf("Nhap a[%d]: ", i + 1);
    9.             scanf(" %d", &a[i]);
    10.         }while((a[i] % 2 == 0 && !fnKT_ChanTang(a, i, a[i])) || (a[i] %2 != 0 && !fnKT_LeGiam(a, i, a[i])));
    11.     }
    12. }
    13.  
    14. int fnKT_ChanTang(int a[], int n, int x)
    15. {
    16.     for(int i = n; i > 0; i--) //bạn cho chạy i =n là sao vậy, mình nghĩ là i = n-1 chứ, nhưng lúc này đang nhập mảng thì a[i]=a[n-1] đã có giá trị đâu.
    17.     {
    18.         if(a[i] % 2 == 0 && x < a[i]) return 0;
    19.     }
    20.     return 1;
    21. }
    22.  
    23. int fnKT_LeGiam(int a[], int n, int x)
    24. {
    25.     for(int i = n; i > 0; i--)
    26.     {
    27.         if(a[i] % 2 != 0 && x > a[i]) return 0;
    28.     }
    29.     return 1;
    30. }

  3. #3
    Ngày gia nhập
    01 2011
    Nơi ở
    -Mountain-
    Bài viết
    768

    Cái này chắc là cái bạn cần. Có cả bài mình code chi tiết
    http://forums.congdongcviet.com/show...t=62260&page=2
    Hướng dẫn C++: https://www.youtube.com/watch?v=BwLodoQdoY4&list=PL1c9Uxlo-mplJDRGdONNupgo5OCBTyGGn

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

    Trích dẫn Nguyên bản được gửi bởi thanhlinh.vietnam Xem bài viết
    Có vấn đề trong code của bạn mình ko hiểu :[
    C Code:
    1. void fnNhapMang(int a[], int n)
    2. {
    3.     if(n < 1) return;
    4.     for (int i = 0; i < n; i++)
    5.     {
    6.         do
    7.         {
    8.             printf("Nhap a[%d]: ", i + 1);
    9.             scanf(" %d", &a[i]);
    10.         }while((a[i] % 2 == 0 && !fnKT_ChanTang(a, i, a[i])) || (a[i] %2 != 0 && !fnKT_LeGiam(a, i, a[i])));
    11.     }
    12. }
    13.  
    14. int fnKT_ChanTang(int a[], int n, int x)
    15. {
    16.     for(int i = n; i > 0; i--) //bạn cho chạy i =n là sao vậy, mình nghĩ là i = n-1 chứ, nhưng lúc này đang nhập mảng thì a[i]=a[n-1] đã có giá trị đâu.
    17.     {
    18.         if(a[i] % 2 == 0 && x < a[i]) return 0;
    19.     }
    20.     return 1;
    21. }
    22.  
    23. int fnKT_LeGiam(int a[], int n, int x)
    24. {
    25.     for(int i = n; i > 0; i--)
    26.     {
    27.         if(a[i] % 2 != 0 && x > a[i]) return 0;
    28.     }
    29.     return 1;
    30. }
    Cám ơn bạn nhiều nha, mình nhầm chỗ đó. Còn cái câu mảng âm dương xen kẽ, bạn trả lời giúp mình luôn nha.

  5. #5
    Ngày gia nhập
    08 2010
    Nơi ở
    Đà Nẵng
    Bài viết
    52

    Trích dẫn Nguyên bản được gửi bởi lytieu_long550 Xem bài viết
    Nhân tiện các bác cho em hỏi, mảng âm dương xen kẽ có tính cho phép phần tử có giá trị 0 trong đó không.
    Ví dụ: 0 0 -1 3 0 -5 7, mảng này có được xem là mảng âm dương xen kẽ không.
    cái đó thì mình không bjk nhưng mình nghĩ là không ^^!

  6. #6
    Ngày gia nhập
    08 2011
    Nơi ở
    Trà Vinh
    Bài viết
    20

    Mặc định Nhập mảng nguyên sao cho chẵn tăng, lẻ giảm

    C1: Trong toán học thì số 0 không là số âm cũng không là số dương. Và yêu cầu đặt ra chỉ cần âm dương xen kẽ, nên mình nghĩ là được.
    C2: Nhưng mình nghĩ : -0 = +0, nếu như trong mảng bạn nhập có số 0 thì
    + là số dương khi trước nó là số âm như vậy số nhập sau cũng là số âm
    + là số âm khi trước nó là số dương như vậy số nhập sau cũng phải là số dương
    Nó là con của thằng nào ? Con của thằng nào ? Nói mau!!!!!!!!!!!!!!!

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

    Trích dẫn Nguyên bản được gửi bởi lytieu_long550 Xem bài viết
    Ví dụ mảng sẽ có các phần tử như sau : 2 9 4 7 6 3 1
    Em code thế này mà không biết còn cách nào tối ưu hơn không, mong các pro giúp đỡ

    Code:
    void fnNhapMang(int a[], int n)
    {
        if(n < 1) return;
        for (int i = 0; i < n; i++)
        {
            do
            {
                printf("Nhap a[%d]: ", i + 1);
                scanf(" %d", &a[i]);
            }while((a[i] % 2 == 0 && !fnKT_ChanTang(a, i, a[i])) || (a[i] %2 != 0 && !fnKT_LeGiam(a, i, a[i])));
        }
    }
    
    int fnKT_ChanTang(int a[], int n, int x)
    {
        for(int i = n - 1; i >= 0; i--)
            if(a[i] % 2 == 0 && x < a[i]) return 0; 
        return 1;
    }
    
    int fnKT_LeGiam(int a[], int n, int x)
    {
        for(int i = n - 1; i >= 0; i--)
            if(a[i] % 2 != 0 && x > a[i]) return 0; 
        return 1;
    }

    ...
    Vấn đề của bạn chỉ đơn giản là nếu nhập vào 1 số chẵn thì nó phải lớn hơn số chẵn trước nó, và nếu nhập vào 1 số lẻ thì nó phải nhỏ hơn số lẻ trước nó

    Vì vậy code như bạn là dài quá mức.

    C Code:
    1. #define SORATLON 999999999
    2. #define
    3.  
    4. // code nhập từ bàn tính n số nguyên vào mảng a, chẵn tăng dần và lẻ giảm dần (0 được coi là chẵn)
    5.  
    6. int soTruoc[2];
    7. soTruoc[1] = SORATLON;
    8. soTruoc[0] = -SORATLON;
    9. int so, le, i = 0;
    10.  
    11. while (i < n)
    12. {
    13.   printf("Nhập phần tử thứ %d ", i+1);
    14.   scanf("%d", &so);
    15.   le = so & 1; // số lẻ
    16.   if (le && soTruoc[1] <= so || !le && soTruoc[0] >= so)
    17.     printf("số không hợp lệ\n");
    18.   else
    19.     a[i++] = soTruoc[le] = so;
    20. }

Các đề tài tương tự

  1. Bài tập C++ Nhập vào các số nguyên dương in ra số chẵn lẻ
    Gửi bởi tuanlt10 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 7
    Bài viết cuối: 24-07-2013, 10:56 AM
  2. Bài tập C bài tập sắp xếp số chẵn tăng dần số lẻ giảm dần trong mảng 1 chiều
    Gửi bởi ronoa trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 07-01-2012, 08:33 AM
  3. In số nguyên chẵn nhỏ nhất trong danh sách?
    Gửi bởi tadenday trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 26-09-2011, 03:55 PM
  4. nhập vào dãy số nguyên in ra dãy chẵn và dãy lẻ
    Gửi bởi live45love trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 5
    Bài viết cuối: 01-04-2007, 01:19 AM
  5. sắp xếp mảng số nguyên chẵn tăng dần, lẻ tăng dần, không dùng mảng tạm
    Gửi bởi hailoc12 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 09-08-2006, 11:44 AM

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