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

Đề tài: Hỏi về cách phân tích 1 số nguyên

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

    Mặc định Hỏi về cách phân tích 1 số nguyên

    Hãy phân tích một số nguyên thành tổng các số nguyên đôi một khác nhau... Và hãy cho biết có bao nhiêu cách phân tích?

    Mọi người giúp mình ý tưởng với. Mình bí quá. Cảm ơn!
    Chỉ có thể biết nhiều hay ít, khó có thể biết cho đủ...

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

    cho VD đi,đôi một khác nhau nghĩa là sao,phân tích ra làm bao nhiêu số,những bộ số này khác nhau ah

  3. #3
    Ngày gia nhập
    10 2007
    Nơi ở
    HCM
    Bài viết
    46

    ý của bạn có phải
    6 = 1 + 5 = 2 + 4 = 1 + 2 + 3 như vậy ko

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

    VD: 6=1+1+1+1+1+1 hoặc 1+2+3 nhưng đôi 1 khác nhau thì chỉ tính 1+2+3 thôi. Tức là các số hạng ko dc giống nhau
    Chỉ có thể biết nhiều hay ít, khó có thể biết cho đủ...

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

    Bài này suy nghĩ đơn giản thì nó thế này.
    Cách 1:
    PHP Code:
    Tổng của n là tổng của 2 -> n/2 số từ 1 tới n/2.

    => công thức cho bài toán:
     
      
    tổng (n/2+...+0) [n/2 ký tự].
      - 
    với 2 ký tự thì:
        for(
    i=-> n/2) (vì phép cộng có tính giao hoán).
         --> 
    in ra số i + (n-i)
      - 
    với 3 ký tự thì
        
    for(-> n/2)
         ---> 
    for(--> n/2-i)
                  
    liệt kê các tổng của i + (n-(i+j))

    cứ như vậy cho tới hết được n/2-1ký tự
    Cách 2:
    PHP Code:
      cũng với phân tích như trên nhưng phân tích ở góc độ đệ qui.

    Tìm n là tổng của 2 sốgồm số i và n-i.
    tìm tổng của n-i với yêu cầu bài toán như trênvới số không được có là i.
    chúng ta không cần tìm tổng của ivì tính chất giao hoán của phép cộng.

     
    + (n-i)
     
    n-+ (n-i-j)
     ....
    vậy trong tổng của (n-iđã có i rùi ;) (vì i ->n/2
    ví dụ:

    PHP Code:
    6.
    +  (6-1) = 5;
    ---> 
    1
    <-- trùng với số 1 
    3.  (tới đây 3 không thể tách được nữa vì 1 có 2 có ;) )
    --> 
    3
    + (6-2) = 4.
    --> 4.
    //không xét vì đã có 2
    1. // không xét vì đã có tổng 1 + 2 + 3 ở trên. 
    gợi ý như vậy bạn tự code xem sao nhé hiện giờ mình không code được vì đang bận .

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

    Mặc định Hỏi về cách phân tích 1 số nguyên

    Cám ơn bạn đã nhiệt tình trả lời nhưng mà... chắc là tại mình stupid quá nên chả hiểu mô tê răng rứa gì cả

    Với cách 1 thì làm sao thực hiện được điều này:
    cứ như vậy cho tới hết được n/2-1: ký tự.
    Với cách 2 mình cũng không biết làm sao có thể đếm được số cách phân tích nữa?

    Không biết có cách nào tối ưu hơn là vét cạn không nhỉ?

    gợi ý như vậy bạn tự code xem sao nhé hiện giờ mình không code được vì đang bậ
    Mình cần hiểu, không cần code. Tuy nhiên để nói cho mình hiểu nổi chắc bạn còn mệt hơn là tự code
    Chỉ có thể biết nhiều hay ít, khó có thể biết cho đủ...

  7. #7
    Ngày gia nhập
    09 2007
    Bài viết
    724

    với cách 2 thì bạn có thể dùng đệ qui.

    Mình cần hiểu, không cần code. Tuy nhiên để nói cho mình hiểu nổi chắc bạn còn mệt hơn là tự code
    Dạo này làm biếng code lắm, ko code đâu

  8. #8
    Ngày gia nhập
    05 2008
    Bài viết
    6

    Bài này bạn dùng công thức truy hồi thì làm được ngay. Tham khảo thử code này nhé. Code thực hiện với các số nguyên dương có thể giống nhau khi phân tích. Bạn thêm thắt 1 số điều kiện để loại bỏ trường hợp các số giống nhau là OK.

    Code:
    /****************************************************************************
    + Cho so nguyen duong N. 
    + Dem so cach phan tich so N thanh tong cac so nguyen duong.
    
     ****************************************************************************/
    
    #include<stdio.h>
    #include<conio.h>
    
    int main()
    {
    	unsigned long f[1000];	// f[m,v]: phan tich so V thanh tong cac so nguyen duong <=m
    	int v,m,n,i;
    	printf("Nhap so nguyen duong n= ");
    	scanf("%ld",&n);
    	while(n<0)
    	{
    		printf("Nhap so nguyen duong n= ");
    		scanf("%ld",&n);
    	}
    
    	for(i=0;i<=n;i++)
    		f[i]=0;
    	f[0]=1;
    
    	for(m=1;m<=n;m++)		
    		for(v=m;v<=n;v++)
    			f[v]=f[v]+f[v-m];
    	printf("Co %ld cach phan tich.\n",f[n]);
    	getch();
    	return 0;
    }
    Đã được chỉnh sửa lần cuối bởi granjota : 04-11-2008 lúc 09:32 PM.

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

    Bài này bạn dùng công thức truy hồi thì làm được ngay. Tham khảo thử code này nhé. Code thực hiện với các số nguyên dương có thể giống nhau khi phân tích. Bạn thêm thắt 1 số điều kiện để loại bỏ trường hợp các số giống nhau là OK.
    Thứ lỗi cho mình đầu đất, mình đọc mãi mới hiểu tư tưởng thuật toán này. Nhưng thật sự hổng biết thêm thắt thế nào để loại cả :-??.
    Chỉ có thể biết nhiều hay ít, khó có thể biết cho đủ...

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

  1. Bài tập C giải thuật nhập vào số nguyên n in ra n số nguyên tố đầu tiên?
    Gửi bởi LTC trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 48
    Bài viết cuối: 25-04-2013, 07:40 PM
  2. Viết chương trình nhập số nguyên dương n, liệt kê n số nguyên tố đầu tiên.
    Gửi bởi maiit trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 11
    Bài viết cuối: 19-06-2011, 01:05 PM
  3. Game Viết chương trình nhập số nguyên dương n, liệt kê n số nguyên tố đầu tiên trên C#?
    Gửi bởi maiit trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 18
    Bài viết cuối: 08-06-2011, 11:12 PM
  4. Bài tập C++ chương trình đổi 1 số nguyên trong hệ thập phân sang hệ fibo và cộng 2 số nguyên được
    Gửi bởi nghiapro512 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: 23-01-2011, 02:14 PM
  5. Lập trình C xin code cài đặt thuật toán sàng nguyên tố để liệt kê các số nguyên tố 2->480000
    Gửi bởi ngocdung_088 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: 06-12-2010, 11:53 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