Giúp em với,C+ bài tập về mảng 2 chiều

Thảo luận trong 'Lập trình & Đồ hoạ' bắt đầu bởi buitrungthanh, 24/11/06.

  1. huunhon

    huunhon Donkey Kong

    Tham gia ngày:
    15/8/05
    Bài viết:
    342
    câu 2 chạy tốt rồi nhưng vẫn phải duyệt mảng 2 lần. Có cách nào duyệt 1 lần ko :))
     
  2. chan__doi

    chan__doi Mr & Ms Pac-Man

    Tham gia ngày:
    30/10/06
    Bài viết:
    159
    Nơi ở:
    Vương quốc ăn ngủ
    PHP:
     void check(int *a,int n)
         {
           
    int min,d=0,i;

           for (
    i=0;i<n;i++)
         if (
    a[i]>0&&d==0) { d=1;min=a[i];}
           else if (
    a[i]>0&&d==1) if (min>a[i]) min=a[i];

           if (
    d==0printf("\n Khong tim thay so duong nho nhat.");
           else 
    printf("\n%d la so duong nho nhat.",min);
         }
    bài 2 một vòng lặp, lỡ post hai bài nên giờ phải sửa lại. Xin lỗi mod nha :D
     
  3. chan__doi

    chan__doi Mr & Ms Pac-Man

    Tham gia ngày:
    30/10/06
    Bài viết:
    159
    Nơi ở:
    Vương quốc ăn ngủ
    PHP:
        void check(int *aint n)
          {
        
    int i=0,j=1;

        while (
    a[i]>a[j]) { i++;j++;}
        if (
    j>n-1printf("\nDay giam.");
         else
         {
           
    i=0,j=1;
           while (
    a[i]<a[j]) { i++;j++;}
           if (
    j>n-1printf("\nDay tang.");
             else 
    printf("\nDay BT.");
             }
           }
    ::) ừ, mình đang dần dần rút kinh nghiệm, cám ơn nhiều nha. Bài 1 mình sửa lại nè. Coi giùm mình với ::)
     
  4. huunhon

    huunhon Donkey Kong

    Tham gia ngày:
    15/8/05
    Bài viết:
    342
    2 bài đều tốt rồi :). Bạn thử làm bài 1 mà chỉ duyệt mảng 1 lần xem, và bài 3 nữa.
     
  5. chan__doi

    chan__doi Mr & Ms Pac-Man

    Tham gia ngày:
    30/10/06
    Bài viết:
    159
    Nơi ở:
    Vương quốc ăn ngủ
    PHP:
      void check(int *a,int n)
         {
        
    int i=0,j=1;

        if (
    a[i]>a[j])
          {
            while (
    a[i]>a[j]) { i++;j++;}
            if (
    j>n-1printf("\nDay giam.");
               else 
    printf("\nDay binh thuong.");
          }
        else if (
    a[i]<a[j])
          {
            while (
    a[i]<a[j]) { i++;j++;}
            if (
    j>n-1printf("\nDay tang.");
              else 
    printf("\nDay binh thuong.");
          }
         }
    một vòng lặp, ::)

    bài 3 mình làm giống bạn MaiVietDung đó ::)

    Nếu thấy đúng thì cho mình thêm bài nha, cám ơn nha mình thích cái này rồi :D :x
     
  6. huunhon

    huunhon Donkey Kong

    Tham gia ngày:
    15/8/05
    Bài viết:
    342
    Bài 3 cũng tương đối đơn giản nên mình post code luôn. Bạn chỉ cần chú ý việc ép kiểu khi chia số int cho số int. Mình viết dựa trên code của bạn maivietdung cho nhanh.
    PHP:
    void Ave(int *a,int n
    {  
        
    int sum=0,time=0
        for (
    int i=0;i<n;i++) 
            if (
    a[i]>&& a[i]%2!=0
            {    
    sum+=a[i]; 
                
    time+=1
            } 
        
    float ave=(float)sum/time

        
    printf("\n - Trung binh cong cac so duong trong mang bang: %3f",ave); 
     
  7. chan__doi

    chan__doi Mr & Ms Pac-Man

    Tham gia ngày:
    30/10/06
    Bài viết:
    159
    Nơi ở:
    Vương quốc ăn ngủ
    ừ, vậy kiếm bài mới tiếp nha :D
    tối về mình lấy mình làm, thx
    :D
     
  8. huunhon

    huunhon Donkey Kong

    Tham gia ngày:
    15/8/05
    Bài viết:
    342
    Bài tập về mảng tiếp tục đây:
    Nhập vào một mảng n số nguyên
    1) Sắp xếp mảng theo thứ tự tăng dần.
    2) Sắp xếp mảng sao cho các số chẳn nằm ở phần đầu mảng, các số lẻ nằm ở phần cuối mảng.
    3) Sắp xếp các số chẵn trong mảng theo thứ tự tăng dần, giữ nguyên vị trí các số lẻ.

    Vd: mảng a: 5 -3 0 1 -2 4 9
    Kết quả:
    câu 1: -3 -2 0 1 4 5 9
    câu 2: 0 -2 4 9 1 -3 5
    câu 3: 5 -3 -2 1 0 4 9
     
  9. chan__doi

    chan__doi Mr & Ms Pac-Man

    Tham gia ngày:
    30/10/06
    Bài viết:
    159
    Nơi ở:
    Vương quốc ăn ngủ
    PHP:
     void doicho(int &a,int&b)
          {
        
    int tam;
        
    tam=a;
        
    a=b;
        
    b=tam;
          }

         
    void check(int *a,int n)
          {
        
    int i=0,j;
        while (
    i<n)
         {
           
    j=i+1;
           while (
    j<n&&a[i]%2==0)
             if (
    a[j]<a[i]&&a[j]%2==0) {doicho(a[i],a[j]);j++;}
              else 
    j++;
           
    i++;
          }
          }
    bài 3 nè ::) nhận xét giùm mình nha, bài 1 và bài 2 chắc để mai quá. Giờ khuya rồi. Mình lại đang xỉn nữa (+.+)
     
  10. huunhon

    huunhon Donkey Kong

    Tham gia ngày:
    15/8/05
    Bài viết:
    342
    bải 3 của bạn chạy tốt rồi . No idea :)).
     
  11. chan__doi

    chan__doi Mr & Ms Pac-Man

    Tham gia ngày:
    30/10/06
    Bài viết:
    159
    Nơi ở:
    Vương quốc ăn ngủ
    bài 1

    PHP:
    void check(int *a,int n)
          {
        
    int i,j;
        for (
    i=0;i<n-1;i++)
          for (
    j=i+1;j<n;j++)
            if (
    a[i]%2==0&&a[j]%2==0&&a[i]>a[j]) doicho(a[i],a[j]);
          }
    bài 2

    PHP:
     void check2(int *a,int n)
          {
        
    int i,j;
        for (
    i=0;i<n;i++)
          for (
    j=i+1;j<n;j++)
             if (
    a[i]%2!=0&&a[j]%2==0doicho(a[i],a[j]);
          }
    bài 3
    PHP:
     void check3(int *a,int n)
          {
        
    int i,j;
        for (
    i=0;i<n;i++)
          for (
    j=i+1;j<n;j++)
            if (
    a[i]>a[j]) doicho(a[i],a[j]);
          }
    mình đang băn khoăn không biết học về lập trình ở đâu, APTECH hay NIIT :-/

    Hồi bữa thi vô APTECH đạt được điểm trung bình hà :'> Mà chưa có học, mấy bạn góp ý mình với

    Mấy bài trên nếu thấy được thì cho mình thêm bài nha :D cám ơn nha ::)
     
  12. huunhon

    huunhon Donkey Kong

    Tham gia ngày:
    15/8/05
    Bài viết:
    342
    hôm qua bận quá, ko online được, sorry nha :)
    Bài 1 và bài 3 của bạn như vậy là tốt rồi, có nhiều cách khác để làm nhưng bây giờ mình chưa dám bàn vì sợ bạn tẩu hoả nhập ma :)).
    Riêng bài 2 bạn thử làm mà chỉ duyệt mảng 1 lần xem.
    Còn về việc học lập trình thì mình ko dám ý kiến, vì mình không học qua các lớp đó nên không nhận xét được. Với lại theo mình nghĩ chỗ nào cũng có cái hay của nó, chỉ cần bạn cố gắng học thì sẽ đạt kết quả tốt thôi.
     
  13. chan__doi

    chan__doi Mr & Ms Pac-Man

    Tham gia ngày:
    30/10/06
    Bài viết:
    159
    Nơi ở:
    Vương quốc ăn ngủ
    PHP:
          void check(int *a,int n)
          {
        
    int i=0,j=1;
        while (
    i<n-1&&j<n)
          if (
    a[i]%2!=0&&a[j]%2==0) { doicho(a[i],a[j]);i++;j=i+1;}
          else 
    j++;
          }
    một vòng lặp, ::) cho mình bài mới được chưa :D
     
  14. huunhon

    huunhon Donkey Kong

    Tham gia ngày:
    15/8/05
    Bài viết:
    342
    Nice :). Mình cũng làm bài đó nhưng với cách khác, bạn có thể xem qua chơi cho biết.
    PHP:
    void check(int a[],int n)
    {
        
    int k=n-1;
        for (
    int i=0;i<k;i++)
        {
            if (
    a[i]%2!=0)
            {
                
    doicho(a[i],a[k]);
                
    k=k-1;
                
    i=i-1;
            }
        }
    }
    Bài tập về mảng 1 chiều
    Cho 1 mảng 1 chiều gồm n số nguyên.
    1) In ra các số nguyên có số lần lặp lại đúng 2 lần trong mảng.
    2) Số nào xuất hiện nhiều lần nhất trong mảng.
    3) In ra số lần xuất hiện của mỗi phần tử trong mảng.
     
  15. chan__doi

    chan__doi Mr & Ms Pac-Man

    Tham gia ngày:
    30/10/06
    Bài viết:
    159
    Nơi ở:
    Vương quốc ăn ngủ
    cám ơn anh nha, em đang làm :D anh 24 tuổi rồi hả, ra trường chưa vậy ::)

    bài trên của anh kì vậy, hình như anh viết lộn rồi đó :-/ em đọc hoài mà không hiểu :-/

    PHP:
         int dem(int *a,int b,int n)
           {
         
    int i,d=0;
         for (
    i=0;i<n;i++)
           if (
    a[b]==a[i]) d++;
         return 
    d;
           }


          
    void check(int *a,int n)
           {
         
    int i,j=0,max=0;
         for (
    i=0;i<n;i++)
          if (
    dem(a,i,n)>max) { max=dem(a,i,n);j=i;}

         
    printf("\n%d la so do",a[j]);
           }
    bai đếm số nào xuất hiện nhiều nhất ::)

    bài 3 và bài 1 em dùng thêm 1 mảng nữa được không ::(
     
  16. huunhon

    huunhon Donkey Kong

    Tham gia ngày:
    15/8/05
    Bài viết:
    342
    bài nào viết lộn vậy bạn? Nếu chạy sai thì mình sửa, còn nếu chạy đúng mà bạn đọc không hiểu thì bạn phải chạy từng bước để xem rồi :).
    Bài 2 chạy tốt rồi.
    Bài 1 và 3 thì bạn làm cách nào cũng được mà, bài toán đâu có điều kiện gì, chỉ cần ra kết quả thôi. Còn việc tối ưu hay không thì do mình thôi.
     
  17. chan__doi

    chan__doi Mr & Ms Pac-Man

    Tham gia ngày:
    30/10/06
    Bài viết:
    159
    Nơi ở:
    Vương quốc ăn ngủ
    xin lỗi anh, em lộn rồi :'> bài anh chạy đúng mà em nhìn không ra ::) sorry nha :D

    bài đếm số xuất hiện hai lần trong mảng ::)

    PHP:
           int kiemtra(int *a,int b,int n)
        {
           
    int i;
           for (
    i=0;i<n;i++)
              if (
    b==a[i]) { return 0; }
           if (
    b!=a[i-1]) return 1;
        }

           
    void check(int *a,int n)
        {
          
    int i,j=1,*b=new int[j];
          for (
    i=0;i<n;i++)
            if (
    dem(a,i,n)==2&&kiemtra(b,a[i],n)==1)
             {
         
    b[j-1]=a[i];j++;printf("\n%d So nay xuat hien hai lan",a[i]);
             }
        
    //  out (b,j);
        
    }
    bài đếm số lần xuất hiện của mỗi phần tử ::)

    PHP:
        void check(int *a,int n)
         {
          
    int i,j=1,*b=new int[j];
          for (
    i=0;i<n;i++)
            if (
    kiemtra(b,a[i],n)==1)
             {
               
    b[j-1]=a[i];j++;
               
    printf("\n%d xuat hien %d lan.",a[i],dem(a,i,n));
             }
          
    out(b,j-1);
         }
     
  18. huunhon

    huunhon Donkey Kong

    Tham gia ngày:
    15/8/05
    Bài viết:
    342
    cả 2 bài trên bạn chạy thử mảng 1 2 2 3 3 rồi xem kết quả và sửa lại nhé
     
  19. chan__doi

    chan__doi Mr & Ms Pac-Man

    Tham gia ngày:
    30/10/06
    Bài viết:
    159
    Nơi ở:
    Vương quốc ăn ngủ
    anh ơi, bộ trong C sau khi mình gán số vào mảng , thì lần sau nó cũng giữ cái số đó hả anh. ::( Bài em sai ở chỗ đó)


    Chạy lần đâu thì good, nhưng đến lân thứ hai trở đi thì không chạy được nữa, do cái mảng b nó giữ các phần tữ ở lần chạy đầu, đem đi so sánh, ::(

    Có cách nào làm mảng b như ở lần chạy đầu không vậy anh ?? :-/ ::(
     
  20. jupiter0402

    jupiter0402 Legend of Zelda

    Tham gia ngày:
    6/6/05
    Bài viết:
    950
    Nơi ở:
    Hệ mặt trời
    Mình có 1 bài như sau:
    Nhập sô N,phát sinh ma trận vuông tương ứng.Nhìn vd là bạn rut ra quy luật:D
    vd : Nhập n=3,phát sinh ma trận:
    1 2 3
    8 9 4
    7 6 5

    Nhập n=4 ,phát sinh ma trận:

    1 2 3 4
    12 13 14 5
    11 16 15 6
    10 9 8 7​
     

Chia sẻ trang này