ברוכים הבאים לאתר תחרויות קודגורו! › פורומים › חידות › חידת הפרשים מתוכנית ג'יגה בית
- This topic has 14 תגובות, 4 משתתפים, and was last updated לפני 16 שנים, 11 חודשים by
yoav zilberman.
-
מאתתגובות
-
20 במרץ 2007 בשעה 13:02 #76953
CodeGuru
מנהל בפורוםלמי שפספס את הקטע על קודגורו ששודר בתוכנית ג'יגהבית היום, רצ"ב ניסוח מדויק של השאלה:
מהו המספר המזערי של פרשים הנחוץ על מנת לאיים על כל 64 המשבצות של לוח שחמט?
פרש נחשב כמאיים על שמונה משבצות המרוחקות מהלך פרש ממנו, וכמובן על המשבצת עליה הוא נמצא.
מהלך פרש – מהמשבצת בקורדינטות
X,Y
אל המשבצת בקורדינטות
X+a, Y+b
כאשר אחד מבין
a,b
הוא פלוס או מינוס אחד והשני הוא פלוס או מינוס שתים.
19 באפריל 2008 בשעה 14:01 #78221yoav zilberman
משתתף8?
19 באפריל 2008 בשעה 14:33 #78219lhason
משתתףאני גם אלך על ניחוש פרוע שזה שמונה.
אפשר לכתוב אלגוריתם ברקורסיית Backtracking כדי למצוא פתרונות לחידה אבל אין לי זמן כרגע.
20 באפריל 2008 בשעה 12:32 #78207yoav zilberman
משתתףמתנצל, פתרון שרשמתי אינו נכון.
אני באמצע בניית תוכנה שתחשב, מחר אפרסם פתרון מלומד, נא לא להתייחס לתשובה קודמת!
יואב
21 באפריל 2008 בשעה 03:26 #78203yoav zilberman
משתתףהתשובה היא 18 .
האם זה נכון?
להלן תוכנית המחשב שמחשבת את המבוקש:
import java.util.*;
public class chess
{
static Scanner yoav=new Scanner(System.in);
static boolean peula(char[][]matrix)
{
int mone=0;
for(int i=0;i<=matrix.length-1;i++)
{
for(int j=0;j<=matrix.length-1;j++)
{
if(matrix[j]!=' ')
{
mone++;
}
}
}
if(mone==Math.pow(matrix.length,2))
{
return true;
}
else
{
return false;
}
}
public static void main(String[]args)
{
int mone=9,currentmone=0;
int x=0;
char[][]matrix=new char[8][8];
for(int i=0;i<=7;i++)
{
for(int j=0;j<=7;j++)
{
matrix[j]=' ';
}
}
while(peula(matrix)==false)
{
for(int i=0;i<=7;i++)
{
for(int j=0;j<=7;j++)
{
if(matrix[j]!='a')
{
if(matrix[j]==' ')
{
currentmone++;
}
if(j-1>=0 && i-2>=0 )
{
if(matrix[i-2][j-1]==' ')
{
currentmone++;
}
}
if(j+1<=7 && i-2>=0)
{
if(matrix[i-2][j+1]==' ')
{
currentmone++;
}
}
if(i+2<=7 && j-1>=0)
{
if(matrix[i+2][j-1]==' ')
{
currentmone++;
}
}
if(i+2<=7 && j+1<=7)
{
if(matrix[i+2][j+1]==' ')
{
currentmone++;
}
}
if(j+2<=7 && i-1>=0)
{
if(matrix[i-1][j+2]==' ')
{
currentmone++;
}
}
if(j-2>=0 && i-1>=0)
{
if(matrix[i-1][j-2]==' ')
{
currentmone++;
}
}
if(j+2<=7 && i+1<=7)
{
if(matrix[i+1][j+2]==' ')
{
currentmone++;
}
}
if(j-2>=0 && i+1<=7)
{
if(matrix[i+1][j-2]==' ')
{
currentmone++;
}
}
}
if(currentmone==mone)
{
matrix[j]='a';
if(i+1<=7 && j-2>=0)
matrix[i+1][j-2]='*';
if(i+1<=0 && j+2<=7)
matrix[i+1][j+2]='*';
if(i-1>=0 && j-2>=0)
matrix[i-1][j-2]='*';
if(i-1>=0 && j+2<=7)
matrix[i-1][j+2]='*';
if(i+2<=7 && j+1<=7)
matrix[i+2][j+1]='*';
if(i+2<=7 && j-1>=0)
matrix[i+2][j-1]='*';
if(i-2>=0 && j+1<=7)
matrix[i-2][j+1]='*';
x++;
}
currentmone=0;
}
}
mone–;
}
System.out.println(x);
}
}21 באפריל 2008 בשעה 05:28 #78202yoav zilberman
משתתףטעות הקלדה, התשובה היא 16
21 באפריל 2008 בשעה 05:32 #78201CodeGuru
מנהל בפורוםתוכנית נחמדה, אבל היא עובדת באופן חמדני – שמה פרש במשבצת פנויה – אפשר לעשות זאת טוב יותר: פחות מ18 פרשים יכולים לכסות את כל הלוח.
21 באפריל 2008 בשעה 06:54 #78200maxim k
משתתףאממ החסם המינימלי הטריוויאלי הוא 9, אבל אני לא מצאתי משהו בסביבה…מצאתי פתרון יפה (ויזואלית) עם 16:
oooooooo
oooooooo
oxxooxxo
ooxxxxoo
ooxxxxoo
oxxooxxo
oooooooo
oooooooo
21 באפריל 2008 בשעה 07:02 #78198maxim k
משתתףמצאתי עם 9
oooooooo
ooxooooo
ooxxoxxo
oooooxoo
ooxooooo
oxxoxxoo
oooooxoo
oooooooo
לא ייתכן פיתרון טוב יותר, מכיוון שכדי לתקוף את הפינות ארבע פרשים צריכים להיות במרחק שורה בדיוק מהקצה, ולכן הם מאבדים 2 משבצות שבהם יכלו לתקוף
כלומר 8 משבצות סה"F
אז דרוש עוד פרש
כלומר סה"F 9 פרשים
חידה יפה מאוד, גם הפיתרון הזה סיטרי ויפה (כמצופה) כשמציירים את זה נורמלית
21 באפריל 2008 בשעה 07:05 #78197maxim k
משתתףהשמחה מוקדמת…פספסתי מספר משבצות
21 באפריל 2008 בשעה 07:11 #78196maxim k
משתתףעוד ארבע פרשים בריבוע ה2 על 2 שבמרכז הלוח פותרים את הבעיה בפיתרון הקודם….
סה"כ 13…אבל זה יותר מדי, לדעתי. אני בטוח שיש פיתרון ב9
21 באפריל 2008 בשעה 07:15 #78195maxim k
משתתףאה
אמרת שהוא מאיים גם על המשבצת שבה הוא נמצא?
אם כך הפיתרון הקודם שלי נכון
ב-9
21 באפריל 2008 בשעה 07:21 #78194yoav zilberman
משתתףהפלט של התוכנית הוא 16 ולא 18 הייתה טעות הקלדה……
21 באפריל 2008 בשעה 07:28 #78193yoav zilberman
משתתףבפתרון שלך יש 12 פרשים, לא 9!
21 באפריל 2008 בשעה 08:08 #78192maxim k
משתתףאני לא יודע לספור
-
מאתתגובות
- יש להתחבר למערכת על מנת להגיב.