Mathcenter Forum  

Go Back   Mathcenter Forum > คลายเครียด > Games and Puzzles
สมัครสมาชิก คู่มือการใช้ รายชื่อสมาชิก ปฏิทิน ข้อความวันนี้

ตั้งหัวข้อใหม่ Reply
 
เครื่องมือของหัวข้อ ค้นหาในหัวข้อนี้
  #1  
Old 26 มิถุนายน 2004, 10:19
tana's Avatar
tana tana ไม่อยู่ในระบบ
ลมปราณบริสุทธิ์
 
วันที่สมัครสมาชิก: 31 มีนาคม 2001
ข้อความ: 145
tana is on a distinguished road
Post Vampire Number

ใครรู้จัก Vampire Number บ้างครับ เลข 2 จำนวนที่คูณกันแล้วได้ออกมาเป็น 2 จำนวนนั้นแต่ตำแหน่งไม่แน่นอน เช่น

1260=21 · 60 , 1395=15 · 93 , 1435=35 · 41 , 1530=30 · 51

อยากรู้ว่าเราสามารถเขียนออกมาเป็นโปรแกรมให้คอมช่วยคำนวณได้ป่าวอ่ะคับ แล้วใครรู้ที่มาของมันบ้างก็ช่วยบอกหน่อยนะครับ ขอบคุณครับ
__________________
" จุดสูงสุด คือ เบื้องล่างที่ผ่านมา จุดสูงค่า คือ สิ่งใดหนอชีวี "

24 เมษายน 2007 20:49 : ข้อความนี้ถูกแก้ไขแล้ว 1 ครั้ง, ครั้งล่าสุดโดยคุณ TOP
เหตุผล: ซ่อมตัวอักษร
ตอบพร้อมอ้างอิงข้อความนี้
  #2  
Old 26 มิถุนายน 2004, 12:30
TOP's Avatar
TOP TOP ไม่อยู่ในระบบ
ผู้พิทักษ์กฎขั้นสูง
 
วันที่สมัครสมาชิก: 27 มีนาคม 2001
ข้อความ: 1,003
TOP is on a distinguished road
Talking

ก็เพิ่งรู้จักจากน้อง tana นี่ละครับ ดูจากนิยามของมันแล้ว เขียนโปรแกรมได้ง่ายมากครับ แค่แยกตัวประกอบ แล้วก็ตรวจสอบตามนิยามของมัน ลองดูจากที่นี่เพิ่มเติมครับ Vampire Number เห็นว่ามีคนค้นพบสูตร สำหรับสร้าง Vampire Number บางรูปแบบ ส่วนที่มาพี่ก็ไม่ทราบครับ ไม่ได้ค้นต่อ แต่คงไม่ใช่ Vampire ที่ไหนหรอก
__________________
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.

26 มิถุนายน 2004 12:34 : ข้อความนี้ถูกแก้ไขแล้ว 1 ครั้ง, ครั้งล่าสุดโดยคุณ TOP
ตอบพร้อมอ้างอิงข้อความนี้
  #3  
Old 27 มิถุนายน 2004, 18:02
tana's Avatar
tana tana ไม่อยู่ในระบบ
ลมปราณบริสุทธิ์
 
วันที่สมัครสมาชิก: 31 มีนาคม 2001
ข้อความ: 145
tana is on a distinguished road
Post

แล้วถ้าพี่เขียนโปรแกรมพี่ชอบใช้ภาษาอะไรเขียนเหรอครับ ที่ผมชอบใช้ก็เป็น Turbo C อ่ะครับ แล้วจะกำหนดตำแหน่งของเลขยังไงดีหละครับ เพื่อจะให้มันตรวจสอบได้น่ะครับ เพราะตำแหน่งสลับกันมั่วเลยด้วย แล้วก็ต้องเทียบเป็นตัวๆ ด้วยอ่ะครับ
__________________
" จุดสูงสุด คือ เบื้องล่างที่ผ่านมา จุดสูงค่า คือ สิ่งใดหนอชีวี "
ตอบพร้อมอ้างอิงข้อความนี้
  #4  
Old 28 มิถุนายน 2004, 17:29
TOP's Avatar
TOP TOP ไม่อยู่ในระบบ
ผู้พิทักษ์กฎขั้นสูง
 
วันที่สมัครสมาชิก: 27 มีนาคม 2001
ข้อความ: 1,003
TOP is on a distinguished road
Lightbulb

พี่ใช้ภาษา C ครับ ตำแหน่งตัวเลขไม่ต้องสนใจสิครับ แค่นับจำนวนของ ตัวเลขแต่ละตัวที่มี ให้ตรงกันก็พอ

ลองเอา Code นี้ไปแกะดูครับ
C Code:
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <math.h>
  5.  
  6. #define TRUE 1
  7. #define FALSE 0
  8.  
  9. int isMatchDigit(char *szFirstNumber, char *szSecondNumber);
  10. int isVampireNumber(long lNumber, long *plFirstFactor, long *plSecondFactor);
  11.  
  12. void main(int argc, char *argv[])
  13. {
  14.     long lMaxNumber;
  15.     long lNumber;
  16.     long lFirstFactor, lSecondFactor;
  17.    
  18.     if(argc != 2)
  19.     {
  20.         fprintf(stderr, "Usage : findvampire.exe upperbound_number\n");
  21.         return;
  22.     }
  23.     else
  24.         lMaxNumber = atol(argv[1]);
  25.    
  26.     for(lNumber = 2; lNumber <= lMaxNumber; lNumber++)
  27.         if(isVampireNumber(lNumber, &lFirstFactor, &lSecondFactor) == TRUE)
  28.             fprintf(stdout, "Found Vampire Number %ld = %ld * %ld\n", lNumber, lFirstFactor, lSecondFactor);
  29. }
  30.  
  31. int isMatchDigit(char *szFirstNumber, char *szSecondNumber)
  32. {
  33.     int arDigitCount[10];
  34.     int iIndex;
  35.     int iNumDigit = strlen(szFirstNumber);
  36.    
  37.     memset(arDigitCount, 0x00, sizeof(arDigitCount));
  38.    
  39.     for(iIndex = iNumDigit-1; iIndex >= 0; iIndex--)
  40.         arDigitCount[*(szFirstNumber + iIndex) - '0']++;
  41.  
  42.     for(iIndex = strlen(szSecondNumber) - 1; iIndex >= 0; iIndex--)
  43.     {
  44.         if(arDigitCount[*(szSecondNumber + iIndex) - '0']  > 0)
  45.         {
  46.             arDigitCount[*(szSecondNumber + iIndex) - '0']--;
  47.             iNumDigit--;
  48.         }
  49.         else
  50.             return FALSE;
  51.     }
  52.    
  53.     if(iNumDigit > 0)
  54.         return FALSE;
  55.     else
  56.         return TRUE;
  57. }
  58.  
  59. int isVampireNumber(long lNumber, long *plFirstFactor, long *plSecondFactor)
  60. {
  61.     char szFirstNumber[20+1];
  62.     char szSecondNumber[20+1];
  63.    
  64.     long lUpperBound = floor(sqrt(lNumber));
  65.     long lDivideNumber;
  66.    
  67.     for(lDivideNumber = 2; lDivideNumber <= lUpperBound; lDivideNumber++)
  68.     {
  69.         if((lNumber%lDivideNumber) == 0)
  70.         {
  71.             *plFirstFactor = lDivideNumber;
  72.             *plSecondFactor = lNumber / (*plFirstFactor);
  73.            
  74.             sprintf(szFirstNumber, "%ld", lNumber);
  75.             sprintf(szSecondNumber, "%ld%ld", *plFirstFactor, *plSecondFactor);
  76.             if(isMatchDigit(szFirstNumber, szSecondNumber) == TRUE)
  77.                 return TRUE;
  78.         }
  79.     }
  80.     return FALSE;
  81. }

ตัวอย่างการใช้ และผลลัพธ์ที่ได้

findvampire.exe 12345

Found Vampire Number 126 = 6 * 21
Found Vampire Number 153 = 3 * 51
Found Vampire Number 688 = 8 * 86
Found Vampire Number 1206 = 6 * 201
Found Vampire Number 1255 = 5 * 251
Found Vampire Number 1260 = 6 * 210
Found Vampire Number 1395 = 15 * 93
Found Vampire Number 1435 = 35 * 41
Found Vampire Number 1503 = 3 * 501
Found Vampire Number 1530 = 3 * 510
Found Vampire Number 1827 = 21 * 87
Found Vampire Number 2187 = 27 * 81
Found Vampire Number 3159 = 9 * 351
Found Vampire Number 3784 = 8 * 473
Found Vampire Number 6880 = 8 * 860
Found Vampire Number 10251 = 51 * 201
Found Vampire Number 10255 = 5 * 2051
Found Vampire Number 10426 = 26 * 401
Found Vampire Number 10521 = 21 * 501
Found Vampire Number 10525 = 5 * 2105
Found Vampire Number 10575 = 15 * 705
Found Vampire Number 11259 = 9 * 1251
Found Vampire Number 11844 = 84 * 141
Found Vampire Number 11848 = 8 * 1481
Found Vampire Number 12006 = 6 * 2001
Found Vampire Number 12060 = 6 * 2010
__________________
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:27 : ข้อความนี้ถูกแก้ไขแล้ว 1 ครั้ง, ครั้งล่าสุดโดยคุณ TOP
ตอบพร้อมอ้างอิงข้อความนี้
ตั้งหัวข้อใหม่ Reply


หัวข้อคล้ายคลึงกัน
หัวข้อ ผู้ตั้งหัวข้อ ห้อง คำตอบ ข้อความล่าสุด
ปัญหาชิงรางวัลข้อที่ 23: Number Theory once more warut คณิตศาสตร์อุดมศึกษา 17 28 ธันวาคม 2011 20:38
ช่วยคิดหน่อยครับ เกี่ยวกับ Number Theory kanji ทฤษฎีจำนวน 0 08 กันยายน 2006 18:22
ปัญหา Number Theory kanji ทฤษฎีจำนวน 4 16 พฤศจิกายน 2005 20:30
Missing number? passer-by ปัญหาคณิตศาสตร์ ประถมปลาย 60 11 มิถุนายน 2005 20:43
Carmichael number <warut> ทฤษฎีจำนวน 2 13 กรกฎาคม 2001 07:28


กฎการส่งข้อความ
คุณ ไม่สามารถ ตั้งหัวข้อใหม่ได้
คุณ ไม่สามารถ ตอบหัวข้อได้
คุณ ไม่สามารถ แนบไฟล์และเอกสารได้
คุณ ไม่สามารถ แก้ไขข้อความของคุณเองได้

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
ทางลัดสู่ห้อง


เวลาที่แสดงทั้งหมด เป็นเวลาที่ประเทศไทย (GMT +7) ขณะนี้เป็นเวลา 03:12


Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Modified by Jetsada Karnpracha