ברוכים הבאים לאתר תחרויות קודגורו! › פורומים › חידות › מציאת סדרה תחת אילוצים
- This topic has 6 תגובות, 2 משתתפים, and was last updated לפני 16 שנים, 11 חודשים by
yoav zilberman.
-
מאתתגובות
-
17 באפריל 2008 בשעה 12:27 #76887
CodeGuru
מנהל בפורוםמצאו סדרה בת 20 איברים של צבעי רמזור (ירוק, צהוב, אדום) שאין בה אף תת-סדרה החוזרת על עצמה פעמיים ברציפות
אתם מוזמנים לשלוח גם סדרות קצרות יותר, אם זה קשה מדי.
17 באפריל 2008 בשעה 13:21 #78248yoav zilberman
משתתףred,yellow,green,red,yellow,yellow,red,yellow,red,red,red,green,green,green,yellow,yellow,yellow,green,yellow,green
האם זה נכון?
בברכה,
יואב זילברמן
18 באפריל 2008 בשעה 02:12 #78247CodeGuru
מנהל בפורוםגם הצבע החמישי וגם השישי צהובים – ז"א שיש תת-סדרה (באורך 1) החוזרת על עצמה ברציפות.
18 באפריל 2008 בשעה 03:28 #78246yoav zilberman
משתתףניסיון נוסף והפעם אני חושב שזה נכון:
red,yellow,green,yellow,red,green,yellow,green,red,green,yellow,red,yellow,green.yellow,red,green,yellow,green,red
האם עכשיו זה נכון?
בברכה,
יואב זילברמן
18 באפריל 2008 בשעה 05:26 #78233CodeGuru
מנהל בפורוםהתשובה נכונה, כל הכבוד! ומי יכול למצוא סדרה ארוכה יותר (נניח 100) המקיימת
אותו התנאי?
18 באפריל 2008 בשעה 07:57 #78229yoav zilberman
משתתףכתבתי תוכנית קטנה שתמצא את המבוקש, בשביל למצוא עבור יותר איברים פשוט יש לשנות את גודל המערך ואת תנאי העצירה של הלולאה החיצונית ביותר.
העיקרון שלי הוא נורא פשוט: כל צבע מקבל מספר שמסמל אותו- אדום=1, ירוק=2, צהוב
אני מתנצל מראש על כך שהתוכנה לא יעילה לחלוטין וניתן לקצר את זמן פעולתה לכדי שורש שלישי!
:
import java.util.*;
public class subsequence
{
static Scanner s=new Scanner(System.in);
public static void main(String[]args)
{
int[]a=new int[100];
int mone=0;
boolean bodek=true;
int index=3;
a[0]=1;
int x=1;
for(int i=1;i<=99;i++)
{
x=1;
index=3;
mone=0;
bodek=true;
a=(int)(Math.random()*3)+1;
while(a==a[i-1])
{
a=(int)(Math.random()*3)+1;
}
while(x==1)
{
x=0;
while(bodek==true)
{
if(i-index>=0)
{
{
for(int j=i-index;j<=i-index+((index-1)/2);j++)
{
if(a[j]==a[j+(index+1)/2])
{
mone++;
}
}
while (mone==(index+1)/2)
{
mone=0;
a=(int)(Math.random()*3)+1;
x=1;
while(a==a[i-1])
{
a=(int)(Math.random()*3)+1;
}
for(int j=(i-index);j<=(i-index+((index-1)/2));j++)
{
if(a[j]==a[j+((index+1)/2)])
{
mone++;
}
}
}
}
}
else
if(i-index<0)
{
bodek=false;
}
index=index+2;
mone=0;
}
}
}
for(int i=0;i<=99;i++)
{
System.out.print(a+",");
}
}
}
בברכה,יואב זילברמן
18 באפריל 2008 בשעה 08:00 #78228yoav zilberman
משתתףבתוכנה מעלה משום מה המעבד החליף את מקום איי במערך בסמל הנורה , בכל מקרה עבור אותו עיקרון שרשמתי הנה פלט לסדרה בת מאה איברים:
1,3,1,2,1,3,2,3,1,2,1,3,1,2,3,2,1,3,1,2,1,3,2,3,1,3,2,1,2,3,1,2,1,3,1,2,3,2,1,2,3,1,3,2,3,1,2,3,2,1,3,1,2,1,3,2,3,1,3,2,1,2,3,1,3,2,3,1,2,1,3,1,2,3,1,3,2,1,3,1,2,3,2,1,2,3,1,3,2,1,2,3,2,1,3,2,3,1,3,2,
1=אדום
2=ירוק
3=צהוב
האם זה נכון?
בברכה,
יואב זילברמן!
-
מאתתגובות
- יש להתחבר למערכת על מנת להגיב.