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

Đề tài: chương trình tìm mảng con chứa các số phần tử không giảm và có số lượng nhiều nhất

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

    Smile chương trình tìm mảng con chứa các số phần tử không giảm và có số lượng nhiều nhất

    Code:
    #include "FindSubArray.h"
    #include "stdio.h"
    #include "math.h"
    void nhapmang(int a[], int &n)
    {
    	printf("nhap vao so luong phan tu: ");
    	scanf("%d",&n);
    	for(int i=0;i<n;i++)
    	{
    		printf("phan tu a[%d]= ",i);
    		scanf("%d",&a[i]);
    	}
    }
    void xuatmang(int a[],int n)
    {
    	
    	for(int i=0;i<n;i++)
    	{
    		printf("%3d",a[i]);
    	}
    }
    
    void FindSubArray(int a[],int &n, int position[], int size[], int& num)
    {
    	int i,j,k,t;
    	int dem=1;
    	int max=0;
    	k=0;
    	num=0;
    	for(i=0;i<n;i++)
    	{
    		dem=1;
    		for(j=i;j<n;j++)
    		{
    			if(a[j]<=a[j+1])
    				dem=dem+1;
    			else break;
    		}
    		
    		if(max<dem)
    			max=dem;
    	}
    	for(i=0;i<n;i++)
    	{
    		dem=1;
    		for(j=i;j<n;j++)
    		{
    			if(a[j]<=a[j+1])
    				dem=dem+1;
    			else break;
    			if(max==dem)
    			{
    				position[k]=i;
    				size[k]=max;
    				num++;
    				k++;
    			}
    		}
    	}
    
    	printf("\ndanh sach vi tri dau tien cua mang con thoa dk la: \n");
    	for(i=0;i<k;++i)
    		printf("%3d",position[i]);
    	printf("\ndanh sach so luong phan tu cua mang con thoa dk la: \n");
    	for(i=0;i<k;i++)
    		printf("%3d",size[i]);
    	printf("\nso mang con la: %d",num);
    }
    mình sửa lại rùi đó.chạy đúng,mình làm 3 filde nhưng file này là nội dung chính
    Đã được chỉnh sửa lần cuối bởi my_friendly_1803 : 02-10-2011 lúc 12:08 PM.

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

    Để dễ tìm lỗi cậu có thể vui lòng post lên toàn bộ chương trình cậu viết không(cả hàm main)
    Thân!
    C++ Code:
    1. int i=0, n=1;
    2. while(i<n)
    3.     cout << "Vô tận!";

  3. #3
    Ngày gia nhập
    08 2011
    Nơi ở
    /pentest
    Bài viết
    44

    C++ Code:
    1.     for(i=0;i<n;i++)
    2.     {
    3.         for(j=i;j<n;j++)
    4.         {
    5.             if(a[j]<=a[j+1]) dem=dem+1;
    6.             else break;
    7.         }

    Lệnh else break; sẽ gặp vấn đề nếu mảng số sau:
    Code:
    1 2 3 0 4 4 5 6
    Đáng ra thì dem sẽ lưu giá trị là 4 tính từ 0 4 4 5 6 mới đúng là mảng con thỏa yêu cầu đề bài, nhưng ở đây nó sẽ lưu là 3 tính từ 1 2 3 khi gặp 0 nó sẽ so sánh 3 xem có <= 0 hay ko, kết quả false -> break; dem = 3; như vậy bạn nên tính đến chuyện tạo thêm một mảng phụ để lưu cái đếm này vì thực sự ta cần đếm số lượng các phần tử của các mảng con của mảng nên sẽ tạo ra một mảng lưu số lượng các phần tử mảng con từ đó tìm mảng con nào thỏa đề mà có số lượng phần tử max, thứ nữa để in ra mảng con này ta cần thêm một chỉ số của đầu mảng con, nghĩa là khi gặp một phần tử mà > phần tử liền kế tiếp nó ta sẽ lấy chỉ số của phần tử kế tiếp đó. Như vậy với một mảng con ta cần lưu 2 giá trị, ta có thể lưu 2 gtri này vào một mảng hoặc 2 mảng tùy bạn.

    Một ý nữa với mảng ví dụ trên là nếu ban đầu i = 0 ta chạy j và so sánh a[j] và a[j+1] thì sau khi tìm được mảng con một 1 2 3 thì i phải = 3 tức a[i] = a[3] = 0 để tìm mảng con tiếp theo. Nếu như bạn thì chỉ i = 0 so sánh cả mảng luôn(với a[j] và a[j+1]) sau đó i = 1 lại so sánh cả mảng còn lại, kết quả sẽ chẳng đi tới đâu. Ý tưởng là thế. Hi vọng giúp ích cho bạn.

    Thân.
    Đã được chỉnh sửa lần cuối bởi meterpreter : 30-09-2011 lúc 05:15 AM.
    We are oft to blame in this...'Tis too much proved.
    - That with devotion's visage and pious action we do sugar o'er the devil himself.

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

  1. Trả lời: 0
    Bài viết cuối: 16-05-2012, 02:35 PM
  2. Tìm số phần tử lặp lại nhiều nhất
    Gửi bởi Vaanres 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: 05-01-2010, 05:01 PM
  3. Tìm phần tử bé nhất của ma trận và đếm xem có bao nhiều phần tử bé nhất??
    Gửi bởi rong3sao 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: 03-04-2009, 10:14 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