ברוכים הבאים לאתר תחרויות קודגורו! › פורומים › חידות › מציאת סדרה תחת אילוצים
- This topic has 6 תגובות, 2 משתתפים, and was last updated לפני 16 שנים, 7 חודשים by yoav zilberman.
-
מאתתגובות
-
17 באפריל 2008 בשעה 12:27 #76887CodeGuruמנהל בפורום
מצאו סדרה בת 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=צהוב
האם זה נכון?
בברכה,
יואב זילברמן!
-
מאתתגובות
- יש להתחבר למערכת על מנת להגיב.