Phân tích số n thành tổng .Help me !!!

Mình có môt bài tập là phân tích một số thành tổng các số nhỏ hơn nó . Ví dụ :n=4 1.1+1+1+1 2.1+1+2 3.1+3 4.2+2 5.4
Trả lời 15 năm trước
Thế này : Bạn để ý dòng từ trên xuống dưới , bắt đầu là 1 và kết thúc là chính số đó . Bạn gom nhóm lần lượt từ sau ra phía trước . Dòng đầu tiên luôn là một dãy các số 1 - dĩ nhiên nếu số ban đầu là 0 hay số âm thì phải xét . Ghi lại ví dụ của bạn nhé : 1. 1+1+1+1 2. 1+1+(1+1) - gom 2 số cuối của dòng 1 3. 1+(1+2) - 2 số cuối của dòng 2 4. 2+2 - Do dòng 3 chỉ có 2 số nên không thể gom 2 số cuối ( gom xong thành 4 mất rồi còn đâu ) , nên phải tăng số 1 đầu tiên lên 1 đơn vị 5. 4 - tương tự như dòng 4 ( nhưng do khi tăng 2 lên thành 3 thì nó bị trùng 3+1=1+3 ở trên nên loại ) have fun
danh
danh
Trả lời 15 năm trước
mình co code nhung ma vướng phải vét cạn và đệ quy chạy với số lớn mất thời gian
danh
danh
Trả lời 15 năm trước
có gì cần thảo luận hoặc mình có thể tìm ra cách khác trong thời gian gần đây liên hệ mình d_danh2002@yahoo.com
Trả lời 14 năm trước
Bài bạn yêu cầu đây!! #include <conio.h> #include <stdio.h> int sum(int a[],int n) { int s=0; for(int i=0;i<n;i++) { s+=a[i]; } return(s); } int t; void addnum(int a[],int n,int num) { for(int j=1;j<=a[n-1];j++) { a[n]=j; int s = sum(a,n); if(s==num) { printf("\n %d = ",t); for(int i=0;i<n;i++) { printf("%d",a[i]); if(i<n-1) { printf("+"); } } break; } if(s<num) { n++; addnum(a,n,num); n--; } if(s>num) { break; } } } void analyzer(int num) { int a[100]; int n=0; a[n++]=1; while (a[0]<=num) { addnum(a,n,num); a[0]++; } } void main() { int num; k:printf("\nNhap mot so bat ky: n= ");scanf("%d",&num); if(num<1) { printf("\nKhong duoc choi xo nhau nha! De nghi nhap lai!!!"); goto k; } else t=num; analyzer(num); getch(); }