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

Đề tài: Tìm độ dài và in ra dãy tăng có nhiều phần tử nhất

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

    Mặc định Tìm độ dài và in ra dãy tăng có nhiều phần tử nhất

    Tìm độ dài và in ra dãy tăng có nhiều phần tử nhất.
    Ví dụ :
    1 3 2 5 6 7 4 2 9 0 4 5 6 3
    In ra : 2 5 6 7 và độ dài là 4

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

    Trích dẫn Nguyên bản được gửi bởi kaito_kid_1012 Xem bài viết
    Tìm độ dài và in ra dãy tăng có nhiều phần tử nhất.
    Ví dụ :
    1 3 2 5 6 7 4 2 9 0 4 5 6 3
    In ra : 2 5 6 7 và độ dài là 4
    Thuật toán là :
    Cần 1 biến đo độ dài dãy đang xét (length ) , 1 biết lưu độ dài lớn nhất ( Lmax ) và 1 mảng lưu các chỉ số cuối cùng của dãy tăng dài nhất ( vì có nhiều dãy tăng lớn nhất có độ dài = nhau vd như bài của bạn có 2 dãy tăng dài nhất là :
    C Code:
    1. 2 5 6 70 4 5 6 //cùng có độ dài là 4
    )
    Xét các phần tử của dãy nếu thỏa mãn dãy tăng ( a[i]<=a[++i] ) thì tăng biến length lên 1 tiếp tục xét tiếp , nếu sai thì so sánh với Lmax ... Nói đến đây bạn nên vừa xem giải thíc vừa xem code nhé . Chúc bạn học tốt !
    C Code:
    1. #include<stdio.h>
    2. #include<conio.h>
    3. #include<stdlib.h>
    4.  
    5.  
    6. void EnterArray (int *,int );
    7. void DislayArray(int *,int );
    8. void DislayArrayWithIndexs(int *,int ,int );
    9.  
    10. //===================================================================== //
    11.  
    12. int main()
    13. {
    14.     int *a , b[10];
    15.     int n ;
    16.     system("mode 55,30");
    17.     printf("\t      Tim day con tang dai nhat");
    18.     printf("\n\n* Nhap so phan tu n = ");
    19.     scanf("%d",&n);
    20.     while(n<2)
    21.     {
    22.         system("cls");
    23.         printf("\n* Nhap sai ! Hay nhap lai n = ");
    24.         scanf("%d",&n);
    25.     }
    26.     a = (int*)calloc(n+1,sizeof(int)); // Cap phat dong cho mang a
    27.     if(a==NULL)
    28.     {
    29.         printf("\n\n\t\t ERROR : Cap phat bo nho khong thanh cong...");
    30.         printf("\n\n* An phim bat ki de thoat...");getch();
    31.         exit(1);// Neu cap phat that bai thoat chuong trinh
    32.     }
    33.     EnterArray(a,n);
    34.     printf("\n\n* Mang ban vua nhap vao la :");
    35.     DislayArray(a,n);
    36.     int i,j=0;
    37.     int length = 1 , Lmax = 1 ;
    38.     for(i=0;i<n-1;i++)
    39.         if(*(a+i)<=*(a+i+1))
    40.             length++ ;
    41.         else
    42.         {
    43.             if(length >= Lmax)
    44.             {
    45.                 if(length>Lmax)
    46.                 {
    47.                     Lmax = length;
    48.                     j = 0 ;
    49.                 }
    50.                 b[j]= i;
    51.                 j++;
    52.             }
    53.             length = 1 ;
    54.         }
    55.  
    56.     if(Lmax==1)
    57.         printf("\n\n* Mang da cho khong chua day con nao tang");
    58.     else
    59.     {
    60.         printf("\n\n* Co %d day con dai nhat gom %d ptu lien tiep la :\n\t",j,Lmax);
    61.         int k ;
    62.         for(k=0;k<j;k++)
    63.         {
    64.             printf("\n\n\   ");
    65.             DislayArrayWithIndexs(a,b[k],Lmax);
    66.         }
    67.  
    68.     }
    69.     free(a); // Giai phong vung nho da cap phat
    70.     printf("\n\n\n* An phim bat ki de thoat...");
    71.     getch();
    72.     return 0;
    73. }
    74. //======================================================================//
    75. //                 Cac ham duoc goi trong ham main ()                   //
    76. //===================================================================== //
    77.  
    78. // Ham nhap mang :
    79. void EnterArray(int *pArr,int n)
    80. {
    81.     int i;
    82.     printf("\n\n* Nhap cac phan tu cua day so :\n\n");
    83.     for(i=0;i<n;i++)
    84.     {
    85.         printf("\n   Element[%d] = ",i);
    86.         scanf("%d",(pArr+i));
    87.     }
    88. }
    89.  
    90. // Ham in mang :
    91. void DislayArray(int *pArr,int n)
    92. {
    93.     int i;
    94.     for(i=0;i<n;i++)
    95.     {
    96.         if(i%2==0) printf("\n\n");
    97.         printf("   Element[%d] = %d \t ",i,*(pArr+i));
    98.     }
    99. }
    100. //Ham in day con dua vao do dai cua day con và vi tri cuoi cung cua day
    101. void DislayArrayWithIndexs(int *pArr,int index,int length)
    102. {
    103.     int i;
    104.     for(i=(index-length+1);i<=index;i++)
    105.         printf("%-d \t ",*(pArr+i));
    106. }
    Đã được chỉnh sửa lần cuối bởi peiu : 23-11-2011 lúc 10:41 PM.

  3. #3
    Ngày gia nhập
    12 2009
    Nơi ở
    The country of happiness
    Bài viết
    182

    chưa bàn tới tính đúng / sai , khâm phục bác Peiu code rất cẩn thận, rõ ràng . Rất hoan nghênh bác Peiu có nhiều bài viết chia sẻ tâm huyết nữa.

    Bài này mình cài stack. Mỗi phần tử chỉ đưa vào và đẩy ra stack đúng 2 lần nên có thể coi là O(2n)
    Trích dẫn Nguyên bản được gửi bởi Wazi Armstrong Xem bài viết
    Ôi skill của mình đã đạt đến hàng tuyệt đỉnh
    Không chỉ ăn, tắm, đi lại có thể code
    Mà giờ đã mình có thể code cả khi ngủ. Code tạm vào buffer của não, lúc nào dậy chỉ việc viết ra một cách trôi chảy không lưỡng lự.
    PS: Nếu ngủ dài rảnh rảnh có thể debug luôn, dậy chỉ việc build ?
    Trích dẫn Nguyên bản được gửi bởi vietanh8286 Xem bài viết
    Lập trình viên giỏi là lập trình viên có vợ

  4. #4
    Ngày gia nhập
    09 2011
    Bài viết
    15

    đây là bài của mình...các bạn góp ý nhé...
    Code:
    #include<stdio.h>
    #include<conio.h>
    #include<math.h>
    #include<iostream.h>
    int b[100],a[100];
    int max=1,n,x[100],tiep;
    void nhapmang(int n)
    {
      int i;
      for(i=1;i<=n;i++)
       {
    	cout<<"phan tu thu "<<i<<": ";
    	cin>>a[i];
       }
    };
    void tim_kiem(int i)
    {
       int tong=1,j;
       x[tong]=a[i];
       if(i<n)
        if(a[i+1]>a[i])
         {
            while(a[i+1]>a[i])
    	     {
      	 	    tong++;
    	 		x[tong]=a[i+1];
    			i++;
             } 			  
           if(tong>max)	  
             { 
       	        max=tong;
       	        for(j=1;j<=tong;j++)
       	            b[j]=x[j];
             }
          tim_kiem(i);
         }
       	else tim_kiem(i+1);
    }
    void xuat()
    {
    	int i;
    	cout<<"day tang dai nhat trong mang la: "<<endl;
    	for(i=1;i<=max;i++)
    	  cout<<b[i]<<" ";
    	cout<<endl<<"do dai la: "<<max  ;
    }
    main()
    {
    	int i=1;
    	cout<<"nhap n vao: ";
    	cin>>n;
    	nhapmang(n);
        tim_kiem(i)	;
        xuat();
    }

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

  1. Kỹ thuật C nhập nhiều tam giác và nhập vào 5 chuổi xếp tăng theo aphab
    Gửi bởi nghiapro2589 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 1
    Bài viết cuối: 28-05-2013, 12:00 PM
  2. Bài toán in số lượng phần tử dãy con tăng nhiều nhất trong dãy A
    Gửi bởi buihuuloc trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 0
    Bài viết cuối: 28-04-2011, 01:05 PM
  3. Bài tập C xác định đoạn tăng nhiều nhất trên C?
    Gửi bởi Linus 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: 02-10-2010, 03:09 AM
  4. Nhập dãy số tăng và chèn phần tử
    Gửi bởi nguyenhuudung0306 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 3
    Bài viết cuối: 17-01-2010, 12:54 AM
  5. Tìm dãy con tăng có nhiều phần tử nhất
    Gửi bởi dreambubble 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: 09-01-2010, 10:21 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