Câu hỏi

21/06/2013 15:00
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
thutrang
21/06/2013 15:00
pebuon_8x
21/06/2013 15:00
duytuantn
21/06/2013 15:00
ducviet
21/06/2013 15:00
Ví dụ :n=4
1.1+1+1+1
2.1+1+2
3.1+3
4.2+2
5.4
Danh sách câu trả lời (4)

Bài bạn yêu cầu đây!!
#include
#include
int sum(int a[],int n)
{ int s=0;
for(int i=0;i {
s+=a;
}
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 {
printf("%d",a);
if(i {
printf("+");
}
}
break;
}
if(s {
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();
}
#include
#include
int sum(int a[],int n)
{ int s=0;
for(int i=0;i
s+=a;
}
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
printf("%d",a);
if(i
printf("+");
}
}
break;
}
if(s
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();
}

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

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

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
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
Trả lời câu hỏi
Câu hỏi lĩnh vực Máy vi tính
Rao vặt Siêu Vip