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

Đề tài: [C] Bài này làm sao đây?

  1. #1
    No Avatar
    ziz0301 Khách

    Mặc định [C] Bài này làm sao đây?

    Mình có một bài là:
    Code:
    Cho hàm dưới đây: 
     int F(int n)
        { int k= 0;
           while (n>1)
              { if ( n % 2 != 0)
                      n = n/2;
                 else
                      n = n*3+1;
                 k++;
               }
          return k;
         }
         
    Tìm các giá trị của F (n) với những n tương ứng:
         n = 6   F(n)=
         n = 7   F(n)=
         n = 8   F(n)=
         n = 9   F(n)=
    Lúc đầu mình thấy nếu đơn giản, thì n=6, chia hết cho 2 vậy n=19...
    Nhưng lại có return k, vậy phải trả về giá trị k đúng ko? Vậy với mỗi n > 1 thì k lại tăng lên, nhưng như vậy thì điền vào F(n) sao đây?
    Các bạn giúp mình với

  2. #2
    Ngày gia nhập
    10 2006
    Nơi ở
    Hà Nội
    Bài viết
    146

    Tớ cũng không hiểu ý định của bạn là gì?
    Sao bạn không cho chương trình chạy để tính ra F(n) tương ứng với đầu vào của n là : 6,7,8,9....

  3. #3
    No Avatar
    ziz0301 Khách

    Ừm, nhưng đó là đề bài chỉ cho vậy thôi, đâu có cho phần trên đâu. Đây là đề thi học kỳ của tớ, nhưng tại vì về hàm tớ còn lơ mơ quá ko hiểu được, vậy nếu như một bài cho là như vậy thì bạn làm thế nào vậy?

  4. #4
    Ngày gia nhập
    10 2006
    Nơi ở
    Hà Nội
    Bài viết
    146

    Rõ ràng bài này là tính số vòng lặp while đó mà, tức là sau mỗi vòng lặp thì tăng k lên.
    Vậy vấn đề đây là tính số vòng lặp, nếu là đề thi trên giấy thì bắt buộc bạn phải tính nhẩm thôi. còn nếu thí trên máy thì bạn thêm các phần hàm main() vào rồi cho nó chạy để tính ra kết quả thôi, nếu cần thiết thì bạn cho vào vòng for(n=6;n<=9;n++) { printf("\n%d",F(n));} để lấy luôn kết quả

  5. #5
    Ngày gia nhập
    11 2006
    Bài viết
    633

    Tự làm đi you, thực chất bài này là tìm số lần chạy của vòng lặp while với 1 giá trị cụ thể.
    Tui đã làm thử thì chỉ có n = 7 chạy được 2 lần, còn lại đều lặp vô hạn, bạn chịu khó làm từng bước thì sẽ thấy.
    nếu cần thiết thì bạn cho vào vòng for(n=6;n<=9;n++) { printf("\n%d",F(n));} để lấy luôn kết quả
    Ngay cái n=6 là máy tính nó chết cứng luôn rồi, còn lâu mới chạy được, giải thuật bị loop vô hạn mà.
    Đã được chỉnh sửa lần cuối bởi huynguyen : 26-01-2007 lúc 08:08 PM.

  6. #6
    No Avatar
    ziz0301 Khách

    Mặc định [C] Bài này làm sao đây?

    Để mình làm thử nhé:
    Code:
    #include <stdio.h>
    #include <conio.h>
     int F (int);
      main ()
    {int n;
       printf ("Nhap n:\n");
       scanf ("%d", &n);
       printf (" \nGia tri cua F(n) là %d = ", F(n));
       getch();
    } 
       int F (int n)
      { int k=0;
         while (n>1)
          { if (n %2 !=0)
                n = n/2;
             else 
                n = n*3+1;
              k++;
            }
           return k;
        }
    Tớ nhập vào, nó ko báo lỗi đâu nhưng mà sao khi chạy thì ko được là sao hic, nó chỉ bảo nhập n, mình nhập 6 rồi nó đơ luôn

  7. #7
    No Avatar
    ziz0301 Khách

    Hi xin lỗi vì chưa đọc thêm nhưng mà nếu vậy thì điền vào F(n) sao đây nhỉ, đề bài ra chỉ bảo mình điền vào giá trị của F(n) nhưng nếu ko chạy được thì điền thế nào vậy?

  8. #8
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,750

    Hi xin lỗi vì chưa đọc thêm nhưng mà nếu vậy thì điền vào F(n) sao đây nhỉ, đề bài ra chỉ bảo mình điền vào giá trị của F(n) nhưng nếu ko chạy được thì điền thế nào vậy?
    Đúng rồi bạn ah, vòng lặp này là vô tận.

    Giả sử n=6 (Thỏa mãn n>1)
    Lần lặp đầu tiên:
    vì n%2==0 nên sẽ thực hiện lệnh: n=n*3+1 vậy kết quả là n=19.
    Lần lặp thứ 2:
    n%2!=0 nên n=n/2 vậy kết quả là n=9.
    Lần lặp thứ 3:
    Tương tự lần 2 cho kết quả n=4.
    Lần lặp thứ 4:
    Tương tự lần 1 cho kết quả là n=13


    Bạn có thể thử xem vòng lặp sẽ không bao giờ kết thúc cả. Tóm lại là bài này để làm gì?
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

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