Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 13 kết quả

Đề tài: Bài tập đệ quy | Tổng số đã cho ở dãy bằng một số chỉ ra

  1. #1
    Ngày gia nhập
    01 2009
    Bài viết
    7

    Angry Bài tập đệ quy | Tổng số đã cho ở dãy bằng một số chỉ ra

    cho một dãy số nhập một số b bất kỳ . hãy hiển thị các trường hợp sao cho tổng số đã cho ở dãy trên bằng b

  2. #2
    Ngày gia nhập
    11 2008
    Bài viết
    203

    Thôi, đệ quy thì mình không biết làm đâu:
    Bạn xem cái này được không.
    Code này dở ở chõ nếu dãy lặp lại thì nó cũng in luôn, về ý tưởng là vậy
    Code:
    #include<conio.h>
    #include<stdio.h>
    
    int main()
    {
    	int mang[50],m,n;
    	printf("Nhap vao so luong phan tu: ");scanf("%d",&n);
    	for(int i=0;i<n;i++)
    	{
    		printf("Nhap vao phan tu thu %d: ",i+1);
    		scanf("%d",&mang[i]);
    	}	
    	printf("\nNhap vao mot so b:");
    	scanf("%d",&m);
    	printf("Cac cap so thoa dieu kien: \n");
    	for(int i=0;i<n-1;i++)
    	{
    		for(int j=i+1;j<n;j++)
    		{
    			if(mang[i]+mang[j]==m)
    			  printf("%d   %d",mang[i],mang[j]);	
    			
    		}
    		printf("\n");
    		
    	}
    	getch();
    }
    Tôi tin rằng: giải thuật thì có thể tìm trong hàng trăm GB ebook, hoặc Google nhưng code chạy thì chưa chắc! Hãy post code để chứng tỏ giải thuật của bạn là đúng!
    Giải thuật là bản thiết kế của ngôi nhà, code là phần xây dựng. Nếu chỉ xây nhà trên giấy thì ta sống chả khác nào người nguyên thủy.

  3. #3
    Ngày gia nhập
    01 2009
    Bài viết
    7

    bạn có biết thuật toán quay lui ko . bài nay ý mình làm theo thuật toán đó đấy. ban có thể giúp mình được ko !

  4. #4
    Ngày gia nhập
    03 2009
    Nơi ở
    Hà Nội
    Bài viết
    74

    Đây,mình viết bằng đệ quy đây.có j không hiểu cứ nói mình sẽ giải thích:
    ở đây mình mặc định dãy số luôn đỡ phải nhập cho mất thời gian.
    Code:
    #include <stdio.h>
    int input[9]={9,8,7,6,5,4,3,2,1};
    int output[10]={0,0,0,0,0,0,0,0,0,0};
    int kt[9]={1,1,1,1,1,1,1,1,1};
    int n=9,tong,tg,sl=0;
    void tri(int x);
    void print();
    int main(){
        printf("Nhap vao tong:");
        scanf("%d",&tong);
        tg=tong;
        tri(0);
    }
    void print(){
        int i;
        for(i=0;i<sl;i++) printf("%d ",output[i]);
        printf("\n");
    }
    void tri(int x){
        int i;
        if(tg>0){
            for(i=0;i<n;i++)
            if((i<n)&&(kt[i]==1)&&(tg>=input[i])){
                output[x]=input[i];
                kt[i]=0;
                tg-=input[i];
                sl++;
                tri(x+1);
                sl--;
                tg+=input[i];
                kt[i]=1;
                output[x]=0;
            }
        }else print();
    }

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

    giúp thì nên giúp sao cho đúng , các bạn nên để ng ta tự làm , có gì khó khăn thì hỏi , chứ sao lại làm cho ng ta thé kia , sao ko có ông mod nào nhắc mấy bạn mới này hết vậy ? vào c việt giờ chỉ thấy làm bt hộ là sao? ko hiẻu nổi
    Em có thấy nắng vàng kỷ niệm
    Hạ ngồi ru thanh thản những môi cười
    Thuở ngồi ngóng tay choàng tay nỗi nhớ
    Vin tay vào tháng năm chơi vơi...

  6. #6
    Ngày gia nhập
    01 2009
    Bài viết
    165

    Mặc định Bài tập đệ quy | Tổng số đã cho ở dãy bằng một số chỉ ra

    mình ko hiểu lắm về cái đề,tổng số đã cho là tổng của mấy số,và hiển thị cái gì?

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

    bài này thường dùng đệ quy quay lui đó bạn ,tổng của bao nhiêu số ko xác định , miễn là trong mảng bạn nhập tổng lại một số phần tử bất kỳ bằng b là đc , hiển thị ra , vd : 2+3=5 , 1+2+2=5 a'
    Em có thấy nắng vàng kỷ niệm
    Hạ ngồi ru thanh thản những môi cười
    Thuở ngồi ngóng tay choàng tay nỗi nhớ
    Vin tay vào tháng năm chơi vơi...

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

    làm thế này xem :
    các số có 2 trường hợp hoặc được chọn(1) để tính tổng hoặc không(0) :
    giả sử dãy số đã cho là :
    A[] = {0 1 2 3 4 5}

    ứng với trường hợp :
    B[] = {0 1 0 0 0 1}
    thì tổng là A[1] + A[5] = 1 + 5 = 6;

    như vậy với 1 số b có sẵn chỉ cần tìm trường hợp nào tổng 1 số các thành phần trong A[] == b là được

    làm quay lui như vầy:

    int sum = 0;

    void Try(int position) {
    for (int i = 0; i <= 1; i++)
    {
    B[position] = i;
    if (i==1)
    {
    sum+=A[position];
    if (sum == b) // print result
    {
    for (int j = 0; i <= position; j++)
    if (B[j] == 1) cout << A[j];
    cout <<endl;
    }
    else // nhánh cận
    if (sum < b && position < số_phần_tử_của_A[]) Try(position + 1);

    //quay lui
    sum -= A[position];
    B[position] = 0;
    }
    }
    Dương Nhật Tân
    dnhattan1910@yahoo.com

  9. #9
    Ngày gia nhập
    01 2009
    Bài viết
    7

    mình phải cấp phát động , ko biết trước bn số . bạn nào xem bài mình sai chỗ nào vậy:
    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3. #include <stdlib.h>
    4. struct dovat
    5. {
    6.     float trongluong;
    7.    char giatri[10];
    8. };
    9. void nhap(struct dovat *p,int n);
    10. void hienthi(struct dovat *p,int n);
    11. void mangdo(int x,int n,float tg);
    12. void maxgiatri(struct dovat *p);
    13. main()
    14. {
    15.     int n;
    16.    float b,tg;
    17.    char c;
    18.     struct dovat *p;
    19.    p=(dovat*)malloc(n*sizeof(dovat));
    20.    do
    21.    {
    22.     clrscr();
    23.       printf("ban hay chon : \n1.nhap\n2.hienthi\n3.mangdo\n4.maxgiatri\n5.exit\n");
    24.       c=getch();
    25.       fflush(stdin);
    26.       switch(c)
    27.       {
    28.         case '1':
    29.          {
    30.             printf("ban da chon :1.nhap\n");
    31.             printf("nhap so do vat n=");scanf("%d",&n);
    32.             nhap(p,n);
    33.             break;
    34.          }
    35.          case '2':
    36.          {
    37.             printf("ban da chon :2.hienthi\n");
    38.             hienthi(p,n);
    39.             break;
    40.          }
    41.          case '3':
    42.          {
    43.             printf("ban da chon :3.mangdo\n");
    44.             printf("ban hay nhap khoi luong toi da ma nha tham hiem mang duoc b=");
    45.             scanf("%f",&b);
    46.             mangdo(0,n,b);
    47.             break;
    48.          }
    49.          case '4':
    50.          {
    51.             printf("ban da chon :4.maxgiatri\n");
    52.             break;
    53.          }
    54.       }
    55.       getch();
    56.    }
    57.    while(1);
    58. }
    59. void nhap(struct dovat *p,int n)
    60. {
    61.    for (int i=0;i<n;i++)
    62.    {
    63.     printf("nhap trong luong b[%d] cua do vat a[%d] ",i+1,i+1);
    64.       scanf("%f",&((*(p+i)).trongluong));
    65.       fflush(stdin);
    66.       printf("nhap gia tri cua c[%d] cua do vat a[%d] ",i+1,i+1);
    67.       gets((*(p+i)).giatri);
    68.    }
    69.  
    70. }
    71. void hienthi(struct dovat *p,int n)
    72. {
    73.     for (int i=0;i<n;i++)
    74.    {
    75.     printf("\ntrong luong cua a[%d]=%f",i+1,(*(p+i)).trongluong);
    76.       printf("\ngia tri cua a[%d]=%s",i+1,(*(p+i)).giatri);
    77.    }
    78. }
    79. void mangdo(int x,int n,float tg)
    80. {
    81.    struct dovat *p;
    82.    int sl;
    83.    bool dung=true;
    84.    if (tg>0)
    85.    {
    86.     for (int i=0;i<n;i++)
    87.     {
    88.         if ((i<n)&&(dung=true)&&(tg>=(*(p+i)).trongluong))
    89.          {
    90.             (*(p+x)).trongluong=(*(p+i)).trongluong;
    91.             tg-=(*(p+i)).trongluong;
    92.             dung=false;
    93.             sl++;
    94.             mangdo(x+1,n,tg);
    95.             sl--;
    96.             tg+=(*(p+i)).trongluong;
    97.             dung=true;
    98.             (*(p+x)).trongluong=0;
    99.          }
    100.     }
    101.     }
    102.     else
    103.     {
    104.         for (int i=0;i<sl;i++)
    105.       {
    106.             printf("%f ",(*(p+i)).trongluong);
    107.       }
    108.     }
    109. }
    Đã được chỉnh sửa lần cuối bởi QuangHoang : 07-04-2009 lúc 08:58 PM.

  10. #10
    Ngày gia nhập
    01 2009
    Bài viết
    7

    có ai xem giúp em bài em làm ở trên với , chỉ em chỗ sai được không ạ

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