Thứ Hai, 3 tháng 12, 2012

Bài tập 03


Đề bài: Tính F(x)
Cho hàm F(x), x ≥ 0 được định nghĩa như sau:
F(x) = x, nếu x ≤ 9
F(x) = F(S(x)), nếu x > 9
Trong đó S(x): tổng các chữ số của x.
Yêu cầu: Hãy viết chương trình tính F(n!), với 1 <= n <= 500.
Phân tích:
Ta có : n! = 1.2.3…n
Dễ thấy rằng các số từ 6! trở đi đều chia hết cho 9 vì 6!= 1.2.3.4.5.6= 720
Và giai thừa của các số sau 6 cũng chia hết cho 9 do có chứa 6!:
Vd
7!= 6!*7 chia hết cho 9
11!= 6!*7*8*9*10*11 chia hết  cho 9
Mà 1 số N chia hết cho 9 thì tổng các chữ số tạo nên số đó cũng chia hết cho 9 ta gọi là N1, mà N1  chia hết cho 9 nên tổng các chữ số tạo nên N1 cũng chia hết cho 9……..đến Nn có <= 9, dựa vào  định nghĩa :
F(x) = x, nếu x ≤ 9
F(x) = F(S(x)), nếu x > 9
Suy ra :  1<= x <=9  , mà một số có tổng các chữ số chia hết cho 9  có 1 chữ số là 9.
Vd:
8!= 40320  chia hết cho 9 và  tổng các chữ số(4+3+2+0) bằng 9.
F(8!) = 40320  với S(8!)= 9  -> F(S(8!))= F(9) = 9.
Vậy bài toán trở nên đơn giản với:
-    1<= n<= 5: F(n!)= 1 ; 2; 6; 6; 3
-       n >=6: F(n!)=9
Code   (phần code này mình tham khảo tuy nhiên vẫn còn vài chỗ khó hiểu, mình sẽ cố gắng suy nghĩ để hiểu sâu hơn)
void main()
{
   int n, fn;
   do
   {
      printf("Nhap n : ");
      scanf("%d", &n);
   }
   while (n<1|| n>500);
   switch (n)
   {
      case 1: fn = 1; break; 
      case 2: fn = 2; break;
      case 3: 
      case 4: fn = 6; break;
      case 5: fn = 3; break;
         default: fn = 9; break;
   }
   printf("F(%d!)= %d\n",n,fn);
}

Không có nhận xét nào:

Đăng nhận xét