PDA

View Full Version : เรียงตัวเลข


st_alongkorn
01 พฤศจิกายน 2001, 08:46
ไม่รู้ว่ามีใครเคยทำโจทย์ข้อนี้มาแล้วบ้างไหม ถ้าไม่เคยลองทำดูนะ
โจทย์ จงเรียงตัวเลข 1 - 9 โดยมีเงื่อนไขว่าเมื่อดึงตัวเลขหลักที่ 1 1 จะหารจำนวนนั้นลงตัว เมื่อดึงตัวเลขหลักที่ 1 และ 2 2 จะหารจำนวนนั้นลงตัว เมื่อดึงตัวเลขหลักที่ 1 , 2 และ 3 3 จะหารจำนวนนั้นลงตัว ... และสุดท้ายเมื่อเรียงทั้ง 9 ตัวแล้ว 9 จะต้องหารลงตัว ( ซึ่งลงตัวอยู่แล้วไม่ว่าจะเรียงยังงัย )
ที่เรียงไว้คือ 987654321 ซึ่งผิดเงื่อนไขตรงที่ 7
1 หาร 9 ลงตัว
2 หาร 98 ลงตัว
3 หาร 987 ลงตัว
4 หาร 9876 ลงตัว
5 หาร 98765 ลงตัว
6 หาร 987654 ลงตัว
7 หาร 9876543 ไม่ลงตัว
8 หาร 98765432 ลงตัว
และ 9 หาร 987654321 ลงตัว
เพื่อนๆ พี่ๆ น้องๆ ลองเรียงดูว่าสามารถเรียงเป็นอย่างอื่นที่สอดคล้องกับเงื่อนไขได้หรือไม่

TOP
02 พฤศจิกายน 2001, 16:18
ถ้าไม่คิดมากนัก ลองไล่ตรวจสอบทีละกรณีไปเรื่อยๆเริ่มจากสองหลักแรกก่อน สุดท้ายจะได้คำตอบเดียวคือ 381654729

st_alongkorn
10 พฤศจิกายน 2001, 00:32
โอ้โห !!! มีจริงๆ ด้วย ... ขอบคุณมากๆ ครับ สุดยอดจริงๆ

ToT
10 พฤศจิกายน 2001, 17:26
สุดยอดครับ แต่ถ้าจะใช้ภาษา C แก้ปัญหาขออัลกอริทึมหน่อยได้ป่าวครับ เขียนเองแล้วไม่ได้อ่ะ มั่วมากๆ

TOP
11 พฤศจิกายน 2001, 15:34
ลองศึกษาจาก Code นี้ดูนะ

void FindNumber(long nNumber,int nDivide);

// Use For Check Number Used
int nUse[10];

void main(void)
{
int i;
// Initialize Data
for(i = 1 ; i <= 9 ; i++) nUse[i] = 0;
FindNumber(0,1);
}

void FindNumber(long nNumber,int nDivide)
{
int i;
for(i = 1; i <= 9 ; i++)
{
if( nUse[i] == 0)
{
if( (10*nNumber + i)%nDivide == 0)
{
nUse[i] = 1;
if( nDivide != 9)
{
FindNumber(10*nNumber + i,nDivide+1);
}
else
{
printf("Found %ld\n",10*nNumber+i);
}
nUse[i] = 0;
}
}
}
}

ToT
11 พฤศจิกายน 2001, 22:17
ขอบคุณมากครับ เดี๋ยวจะลองเอาไปศึกษาดู ( ใช้ array เก็บตัวซ้ำ เป็นวีธีที่ดีมากเลยคับ มือใหม่อ่ะ แหะๆๆๆ )