ดูหนึ่งข้อความ
  #27  
Old 29 ตุลาคม 2006, 16:02
TOP's Avatar
TOP TOP ไม่อยู่ในระบบ
ผู้พิทักษ์กฎขั้นสูง
 
วันที่สมัครสมาชิก: 27 มีนาคม 2001
ข้อความ: 1,003
TOP is on a distinguished road
Smile

C Code:
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <limits.h>  /* For ULONG_MAX  Definition */
  4.  
  5. int isFreeNine(unsigned long ulNumber);
  6.  
  7. int main(int argc, char* argv[])
  8. {
  9.     unsigned long ulNumber;
  10.     unsigned long ulNumNine = 0;
  11.     unsigned long ulNumFreeNine = 0;
  12.     unsigned long ulNumX;
  13.  
  14.     for(ulNumber = 1, ulNumX = 0; ulNumber <= ULONG_MAX && ulNumX < 13; ulNumber++)
  15.     {
  16.         if(isFreeNine(ulNumber) == 1)
  17.             ulNumFreeNine++;
  18.         else
  19.             ulNumNine++;
  20.  
  21.         if(ulNumNine == ulNumFreeNine)
  22.         {
  23.             ulNumX++;
  24.             printf("X[%lu] = %lu\n", ulNumX, ulNumber);
  25.         }
  26.  
  27.     }
  28.  
  29.     return 0;
  30. }
  31.  
  32. int isFreeNine(unsigned long ulNumber)
  33. {
  34.     char szNumber[10+1];
  35.     int iIdx;
  36.  
  37.     sprintf(szNumber, "%lu", ulNumber);
  38.  
  39.     for(iIdx = strlen(szNumber)-1; iIdx >= 0; iIdx--)
  40.     {
  41.         if(szNumber[iIdx] == '9')
  42.             return 0;
  43.     }
  44.  
  45.     return 1;
  46. }

สำหรับฟังก์ชัน isFreeNine เขียนตามที่คุณ warut แนะนำมาจะเป็นดังนี้

C Code:
  1. int isFreeNine(unsigned long ulNumber)
  2. {
  3.     while(ulNumber > 0)
  4.     {
  5.         if(ulNumber%10 == 9)
  6.             return 0;
  7.         else
  8.             ulNumber/=10;
  9.     }
  10.     return 1;
  11. }

มีใครเคยทดลองเปลี่ยนจากเลข 9-free number เป็น เลขอื่นไหม เช่น 0-8 free number โดยหลักความเท่าเทียมกัน แล้วมันน่าจะกระจายตัวใกล้เคียงกัน แต่มันกลับไม่เป็นเช่นนั้น

ตัวอย่างผลลัพธ์ที่ได้ (อาจจะได้มากกว่านี้ เพราะผมให้เวลาในการรันโปรแกรมไม่นานนัก)

0-free number
X[1] = 10761678
X[2] = 14958584
X[3] = 14960718
X[4] = 14961734
X[5] = 15013206
X[6] = 15588832
X[7] = 15590574
X[8] = 15591958
X[9] = 15591960
X[10] = 15592032
X[11] = 15592228
X[12] = 15592230
X[13] = 15603696
X[14] = 15633494
X[15] = 15633504
X[16] = 15633516
X[17] = 16076088
X[18] = 16263742
X[19] = 20327616


1-free number
X[1] = 2
X[2] = 16
X[3] = 24
X[4] = 160
X[5] = 270
X[6] = 272
X[7] = 1456
X[8] = 3398
X[9] = 3418
X[10] = 3420
X[11] = 3422
X[12] = 13120
X[13] = 44686
X[14] = 118096
X[15] = 674934
X[16] = 1062880

2-free number
X[1] = 2
X[2] = 2914
X[3] = 3150
X[4] = 3152
X[5] = 3238
X[6] = 3398
X[7] = 26242
X[8] = 41558
X[9] = 42280
X[10] = 44686
X[11] = 236194
X[12] = 671784
X[13] = 672136
X[14] = 674910
X[15] = 674912
X[16] = 674926
X[17] = 674934
X[18] = 1299076
X[19] = 1305158
X[20] = 1305232
X[21] = 1305406
X[22] = 1325320
X[23] = 1346694
X[24] = 2125762

3-free number
X[1] = 39364
X[2] = 41288
X[3] = 41308
X[4] = 41558
X[5] = 43738
X[6] = 44686
X[7] = 354292
X[8] = 671782
X[9] = 671784
X[10] = 673594
X[11] = 674910
X[12] = 3188644


4-free number
X[1] = 472390
X[2] = 630226
X[3] = 642976
X[4] = 671782
X[5] = 671784
X[6] = 4251526


5-free number
X[1] = 590488
X[2] = 630224
X[3] = 630226
X[4] = 656098
X[5] = 671782
X[6] = 5314408


6-free number
X[1] = 6377290


7-free number
X[1] = 7440172
X[2] = 15633516
X[3] = 15633518
X[4] = 15707032
X[5] = 16264012
X[6] = 16271278
X[7] = 16305300
X[8] = 16307728
X[9] = 16308426
X[10] = 16308428
X[11] = 16769914
X[12] = 16935524
X[13] = 16937584
X[14] = 16938652
X[15] = 16938718
X[16] = 16938922
X[17] = 16979866
X[18] = 16980210
X[19] = 17006110


8-free number
X[1] = 8503054
X[2] = 15633516
X[3] = 15633518
X[4] = 15825130
X[5] = 16263742
X[6] = 16263826
X[7] = 16264012
X[8] = 16284400
X[9] = 16305276
X[10] = 16305278
X[11] = 16305280
X[12] = 16305300
X[13] = 16888012
X[14] = 16935524
X[15] = 18068992


9-free number
X[1] = 9565936
X[2] = 15588832
X[3] = 15588934
X[4] = 15633516
X[5] = 15943228
X[6] = 16263742
X[7] = 16263988
X[8] = 16264012
X[9] = 16297522
X[10] = 16305276
X[11] = 16305298
X[12] = 16305300
X[13] = 19131874
__________________
The difference between school and life?
In school, you're taught a lesson and then given a test.
In life, you're given a test that teaches you a lesson.

25 มีนาคม 2007 14:25 : ข้อความนี้ถูกแก้ไขแล้ว 1 ครั้ง, ครั้งล่าสุดโดยคุณ TOP
ตอบพร้อมอ้างอิงข้อความนี้