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

Đề tài: thắc mắc chia m viên bi cho n người

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

    Mặc định thắc mắc chia m viên bi cho n người

    mình có bài tập là viết chương trình chia m viên bi cho n người bằng đệ quy code đây
    Code:
    int a[100]// voi a[i] dai dien cho nguoi thu i
    void divide(int m,int n)
    {
         a[n]=a[n]+1;
         if(m>1)divide(m-1,n);
         else write();
         a[n]=a[n]-1;
         if(n>1)divide(m,n-1);
    }
    //ham wirte la ham xuat ket qua tu nguoi thu nhat den nguoi thu n
    mình muốn hỏi là nếu như sau lần đầu tiên m>1 ta sẽ thực hiên lệnh divide với m=m-1.... khi ta kết thúc thực hiện xong lệnh divide thứ 2 này xong, giá trị của m và n sẽ thay đổi tiếp đến ta thực hiện tiếp
    Code:
    a[n]=a[n]-1;
         if(n>1)divide(m,n-1);]
    vậy giá trị m và n mà ta đang thực hiện code trên là m và n ban đầu hay m và n sau khi đã biến đổi bởi lệnh divide trước??? ý mình là sau khi đệ quy hàm xong,nếu giá trị của biến(ở đây m và n là biến toàn cục) thay đổi thì đoạn lệnh còn lại sau lần đệ quy ở hàm ban đầu sẽ nhận giá trị là gì, thank các ban trc

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

    Có 1 cách để tự kiểm tra mà ko phải hỏi.
    Đó là cout<< giá trị cần xem ra ngoài tại mỗi bước đệ quy
    Nhìn kết quả và suy ngẫm là hiểu
    Um Mani Padme Hum...!!

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

    Trích dẫn Nguyên bản được gửi bởi clchicken Xem bài viết
    Có 1 cách để tự kiểm tra mà ko phải hỏi.
    Đó là cout<< giá trị cần xem ra ngoài tại mỗi bước đệ quy
    Nhìn kết quả và suy ngẫm là hiểu
    anh ơi,em đã nháp hết mấy trang giấy để xem lệnh nó thực hiên như thế nào, như em làm thì đoạn code sau lần đẹ quy đầu tiên là nó sẽ lấy giá trị ban đầu( của hàm ban đầu chưa nó ấy) thì các giá trị nó sẽ ra chuẩn nhưng theo logic thì m,n là biến toàn cục thì nếu lệnh đê quy mà thực hiên trước làm biến đổi m ,n thì các lệnh sau đó nó sẽ theo m,n bị biến đổi, cách của anh hay lắm,để em thử xem

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

    Không cho biết luật chia ra làm sao thì lấy gì kiểm tra thuật toán?

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

    Trích dẫn Nguyên bản được gửi bởi VoTichSu Xem bài viết
    Không cho biết luật chia ra làm sao thì lấy gì kiểm tra thuật toán?
    à,thuật toán thì có lẽ cũng không cần thiết mà vì ở đây mình hỏi về sự thay đổi của các biến m,n khi đệ quy thôi còn nếu cần thì thuật toán là : chia bi sao cho số bi được chia hết ,không còn viên nào,vây thôi

  6. #6
    Ngày gia nhập
    12 2014
    Bài viết
    0

    Mặc định thắc mắc chia m viên bi cho n người

    Cho em được đào mộ tí, mong là có cao nhân nào giúp em.
    Code:
    #include <stdio.h>
    #include <conio.h>
    int a[100];
    int i,j,m,n;
    void inkq()
    { 
    	j+=1;
      	printf("\n Cach thu %d : ",j);
      	for (i=1;i<=n;i++)
       	printf("%d ",a[i]);
    }
    void chia(int m, int n)
    { 
    	a[n] +=1;
    	if (m>1) 
    	{
    		printf("\nm=%d,n=%d\n",m,n);
      		for (i=1;i<=n;i++)
       		printf("%d ",a[i]);
      		chia(m-1,n);
    	}
      	else
        	inkq();
      		a[n] -=1;
      	if (n>1) 
      	{
    		printf("\nm=%d,n=%d\n",m,n);
      		for (i=1;i<=n;i++)
    		printf("%d ",a[i]);
      		chia(m,n-1);
    	}
    }
    void main()
    { 
    	do
    	{
        	printf("\n Cho so bi m =  ");
        	scanf("%d",&m); 
        	printf("\n Cho so nguoi n =  ");
        	scanf("%d",&n);
      	}while (m<=0 || n<=0);
    
      	for(i=1;i<=n;i++)
    		a[i]=0; 
      	j=0;
    	chia(m,n);
    }
    Click vào hình ảnh để lấy hình ảnh lớn

Tên:		1_zpsf2116f8e.png
Lần xem:	4
Size:		204.4 KB
ID:		25581

    Điều em không hiểu là tại sao sau đoạn Cach thu 3: 1 0 2, đáng lẽ m và n phải trả về 1 và 1 và đều không thỏa mãn 2 điều kiện của hàm (m>1,n>1) rồi thoát khỏi hàm nhưng hàm vẫn tiếp tục và cả m và n tăng lên 2 và 3.

    - - - Nội dung đã được cập nhật ngày 24-12-2014 lúc 01:56 PM - - -

    Up hóng cao nhân !!!
    Đã được chỉnh sửa lần cuối bởi hoaluuly777 : 24-12-2014 lúc 03:58 AM.

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

  1. Cấu trúc dữ liệu lỗi code sắp xếp phân đoạn cho dãy sinh viên theo chiều giảm dần của điểm tổng kết
    Gửi bởi snoit trong diễn đàn Thắc mắc CTDL & Giải thuật
    Trả lời: 1
    Bài viết cuối: 21-11-2011, 11:28 AM
  2. Bài toán quản lý sinh viên bằng mảng 1 chiều trong C?
    Gửi bởi bach_sau2009 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: 06-12-2010, 04:45 PM
  3. BT về danh sách sinh viên + mảng 2 chiều
    Gửi bởi vn00284716 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 16
    Bài viết cuối: 31-01-2010, 03:02 PM
  4. Code quản lý giáo viên trong C++. không thể xóa bớt 1 giáo viên, sửa thế nào?
    Gửi bởi congtuazx trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 6
    Bài viết cuối: 15-05-2009, 03:05 PM

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