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....
Mình có một bài là:
Lúc đầu mình thấy nếu đơn giản, thì n=6, chia hết cho 2 vậy n=19...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)=
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
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....
Ừ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?
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ả
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.
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à.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ả
Đã được chỉnh sửa lần cuối bởi huynguyen : 26-01-2007 lúc 08:08 PM.
Để mình làm thử nhé:
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ônCode:#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; }
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.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?
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ì?
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!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!)