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

Đề tài: Chèn giá trị x vào sau các phần tử chẵn

  1. #1
    Ngày gia nhập
    12 2010
    Nơi ở
    tphcm
    Bài viết
    35

    Mặc định Chèn giá trị x vào sau các phần tử chẵn

    Không biết sai chỗ nào mà chỉ chèn được có 1 lần. Mọi người chỉ giúp
    C++ Code:
    1. #define MAX 50
    2. void chenViTriX(int a[],int &n,int vt,int x)
    3. {
    4.     if(vt<0||vt>=n)
    5.         cout<<"Khong chen duoc";
    6.     else
    7.     {
    8.         n++;
    9.         for(int i=n-1;i>=vt;i--)
    10.             a[i+1]=a[i];
    11.         a[vt]=x;       
    12.     }
    13. }
    14. void chenGiaTriXSauCacSoChan(int a[],int &n,int x)
    15. {
    16.     for(int i=0;i<n;i++)
    17.         if(a[i]%2==0)
    18.         {
    19.             chenViTriX(a,n,i+1,x);
    20.         }
    21. }
    22. void main()
    23. {      
    24.     int a[MAX];
    25.     int n,x;
    26.     cout<<"Nhap kich thuoc mang: ";
    27.     cin>>n;
    28.     nhapMangInt(a,n);
    29.     xuatMangInt(a,n);
    30.     cout<<"Nhap x:";
    31.     cin>>x;
    32.     cout<<"Chen "<<x<<" sau cac phan tu chan: "<<endl;
    33.     chenGiaTriXSauCacSoChan(a,n,x);
    34.     xuatMangInt(a,n);
    35. }
    mình dùng mảng sau để test: 1 2 3 4 (x=5)
    kết quả: 1 2 5 3 4
    thiếu mất số 5 sau số 4
    Đã được chỉnh sửa lần cuối bởi danielh : 11-06-2011 lúc 01:34 PM.

  2. #2
    Ngày gia nhập
    02 2008
    Bài viết
    93

    mà theo như code cậu viết thì
    mình dự đoán kết quả sẽ như thế này : ( không có compiler để test)
    nếu chuôi là 1 2 2 2 chẳng hạn và x = 4
    thì kết quả sẽ là 1 2 4 4 2 2
    vj sau khi chèn cậu không cho i tăng lên nên ở vòng lặp sau i sẽ nằm ở giá trị x mà nếu x chẵn thì ...
    mình cũng không rõ cái n của cậu là thế nào/ tĩnh hay động nên cũng khó trả lời. cậu post toàn bộ code lên là tốt nhất.
    và post cả giá trị test nữa. tiện hơn
    Đừng Buồn Khi Ai Đó Nói Bạn Ngu Bởi Vì Ngu = Never Give Up

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

    lỗi là ở đoạn này
    C++ Code:
    1. if(vt<0||vt>=n)
    2.         cout<<"Khong chen duoc";
    do lúc duyệt đến cuối mảng thì giá trị vt sẽ bằng i+1 và bằng n nên câu lệnh cout<<"Khong chen duoc" sẽ được thực hiện theo điều kiện if(vt<0||vt>=n) và bỏ qua đoạn lệnh ở dưới
    bạn sửa thành thế này là được
    C Code:
    1. if(vt<0||vt>n)

  4. #4
    Ngày gia nhập
    12 2010
    Nơi ở
    Hà Nội
    Bài viết
    2

    C Code:
    1. if(vt<0||vt>n)
    Sửa như bạn 19-6 là đúng, nhưng vẫn thiếu xử lý trường hợp nhập số x chẵn (Như bạn Hoaxuyenchi đưa ra trường hợp này). Chỉ cần sửa thêm một chút như sau:
    Code:
    void chenGiaTriXSauCacSoChan(int a[],int &n,int x)
    {
        for(int i=0;i<n;i++)
            if(a[i]%2==0)
            {
                chenViTriX(a,n,i+1,x);
                if(x%2==0) i++; //Sua doan nay
            }
    }
    Kiểm tra, nếu x chẵn thì nhảy qua số chẵn vừa add vào là được

  5. #5
    Ngày gia nhập
    02 2008
    Bài viết
    93

    Trích dẫn Nguyên bản được gửi bởi kendosan Xem bài viết
    C Code:
    1. if(vt<0||vt>n)
    Sửa như bạn 19-6 là đúng, nhưng vẫn thiếu xử lý trường hợp nhập số x chẵn (Như bạn Hoaxuyenchi đưa ra trường hợp này). Chỉ cần sửa thêm một chút như sau:
    Code:
    void chenGiaTriXSauCacSoChan(int a[],int &n,int x)
    {
        for(int i=0;i<n;i++)
            if(a[i]%2==0)
            {
                chenViTriX(a,n,i+1,x);
                if(x%2==0) i++; //Sua doan nay
            }
    }
    Kiểm tra, nếu x chẵn thì nhảy qua số chẵn vừa add vào là được
    không cần thiết phải if làm gì cứ cho nó nhảy qua luôn vì dù sao cái phần tử x chền vào cũng không cần phải xử lý.
    Đừng Buồn Khi Ai Đó Nói Bạn Ngu Bởi Vì Ngu = Never Give Up

  6. #6
    Ngày gia nhập
    06 2011
    Nơi ở
    Tp HCM
    Bài viết
    5

    Mặc định Chèn giá trị x vào sau các phần tử chẵn

    Theo mình thì bạn nên sửa 1 vài chỗ:
    if(vt<0||vt>=n) thành if(vt<0||vt>n)
    vì mình có thể chèn vị trí cuối
    vd n=5 mảng: 1 2 3 4 5 co thể chèn 100 tại vị trí n ==> 1 2 3 4 5 100
    C++ Code:
    1. void chenViTriX(int a[],int &n,int vt,int x)
    2. {
    3.    if(vt<0||vt>n)
    4.         cout<<"Khong chen duoc";
    5.     else
    6.     {
    7.         n++;
    8.         for(int i=n-1;i>=vt;i--)
    9.             a[i+1]=a[i];
    10.         a[vt]=x;      
    11.     }
    12. }
    Tiếp theo là sửa:
    C++ Code:
    1. void chenGiaTriXSauCacSoChan(int a[],int &n,int x)
    2. {
    3.     for(int i=0;i<n;i++)
    4.         if(a[i]%2==0)
    5.         {
    6.             chenViTriX(a,n,i+1,x);
    7.             i++; //thêm vào
    8.         }
    9. }
    Vì khi chèn sau phần tử chẵn thì i phải tăng lên 1 để cho qua pt mới vừa chèn, trường hợp phần tử chèn vào là chẵn nữa thì nó sẽ chèn mãi mãi và chương trình không chạy được.
    Mình đã chạy thử và ra kết quả đúng.
    Đã được chỉnh sửa lần cuối bởi huuloc_dk : 11-06-2011 lúc 09:01 PM.

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

    Sửa như vầy cho gọn:

    C Code:
    1. void chenViTriX(int a[],int &n,int vt,int x)
    2. {
    3.    if(vt<0||vt>n)
    4.         cout<<"Khong chen duoc";
    5.     else
    6.     {
    7.         // tăng n sau khi đã sử lý
    8.         for(int i=n;i>=vt;i--)
    9.             a[i+1]=a[i];
    10.         a[vt]=x;
    11.         n++;
    12.     }
    13. }
    14.  
    15. void chenGiaTriXSauCacSoChan(int a[],int &n,int x)
    16. {
    17.     for(int i=0;i<n;i++)
    18.         if(a[i]%2==0)
    19.         {
    20.             chenViTriX(a,n,++i,x); // tăng i trước khi sử lý
    21.         }
    22. }

  8. #8
    Ngày gia nhập
    10 2013
    Bài viết
    1

    cho minh hoi
    minh lam chuong trinh nay gop lai
    mang ngau nhien thi chay dc
    ma may cai khac chay dc ma khong ra kq


    #include<stdio.h>
    #include <conio.h>
    #include<time.h>
    #include<stdlib.h>
    void Nhap(int a[], int n);
    void Xuat(int a[], int n);
    void Nhap(int a[100], int n)
    {
    int i;
    srand(time(0));
    for(i=0;i<n;i++)

    {
    a[i]=(rand()%31)+20;
    }
    }
    void Xuat(int a[], int n)
    {
    for(int i = 0; i < n; i++)
    {
    printf("%d ",a[i]);
    }
    }
    int SoNguyenTo(int n)
    {
    if (n<=1)
    return 0;
    for (int i=2; i<n; i++)
    if(n%i==0)
    return 0;
    return 1;
    }
    int NguyenToLonNhat(int a[],int n)
    {
    int dem=0;
    int max;
    for(int i=0; i<n; i++)
    {
    if(SoNguyenTo(a[i])==1)
    {
    dem ++;
    max = a[i];
    break;
    }
    }
    if (dem ==0)
    return 0;
    for (i=i+1; i<n; i++)
    {
    if ((SoNguyenTo(a[i])==1) && (max<a[i]))
    {
    max = a[i];
    }
    }
    return max;
    printf("\n %d,max);
    }
    int vtduongnhonhat(float a[], int n)
    {
    int min;
    int dem =0 ;
    for (int i=0; i<n; i++)
    {
    if(a[i]>0)
    {
    dem++;
    min = i;
    break;
    }
    }
    if (dem == 0)
    return -1;
    for (i=i+1; i<n; i++)
    {
    if((a[i]>0)&&(a[min]>a[i]))
    {
    min = i;
    }
    }
    return min;
    }
    void main()
    {
    clrscr();
    int a[100], n;
    printf("\n Nguyen Van Hai 12tct2");
    printf("\n Nhap so phan tu cua mang : ");
    scanf("%d",&n);
    Nhap(a,n);
    Xuat(a,n);
    printf("\n so nguyen to lon nhat la :");
    NguyenToLonNhat(a,n);
    printf("\n vt nho nhat :");
    vtduongnhonha(a,n);
    getch();
    }

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

  1. Lập trình C Sắp xếp mảng 1 chiều:Phần tử chẵn về đầu tiếp đến là số 0(nếu có)và phần tử lẻ ở cuối
    Gửi bởi daicaoboi trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 15
    Bài viết cuối: 14-01-2011, 01:30 AM
  2. Viết hàm tính s là tổng các phần tử trước phần tử chẵn cuối cùng của mảng.
    Gửi bởi viettan trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 23
    Bài viết cuối: 10-01-2011, 03:54 AM
  3. Tính tổng của các phần tử chẵn trong mảng ntn?
    Gửi bởi dophubao trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 24-11-2010, 10:10 AM
  4. Lập trình C | Tính tổng và in tất cả các phần tử chẵn trong mảng
    Gửi bởi xitrum12314 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: 25-05-2009, 02:31 PM
  5. Hỏi về đếm số lượng các phần tử kề nhau mà cả 2 đều chẵn
    Gửi bởi daithienvuong99 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: 30-01-2008, 09:12 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