מציאת סדרה תחת אילוצים

עמוד
מוצגות 7 תגובות – 1 עד 7 (מתוך 7 סה״כ)
  • מאת
    תגובות
  • #76887
    CodeGuru
    מנהל בפורום

    מצאו סדרה בת 20 איברים של צבעי רמזור (ירוק, צהוב, אדום) שאין בה אף תת-סדרה החוזרת על עצמה פעמיים ברציפות

    אתם מוזמנים לשלוח גם סדרות קצרות יותר, אם זה קשה מדי.

    #78248
    yoav zilberman
    משתתף

    red,yellow,green,red,yellow,yellow,red,yellow,red,red,red,green,green,green,yellow,yellow,yellow,green,yellow,green

    האם זה נכון?

    בברכה,

    יואב זילברמן

    #78247
    CodeGuru
    מנהל בפורום

    גם הצבע החמישי וגם השישי צהובים – ז"א שיש תת-סדרה (באורך 1) החוזרת על עצמה ברציפות.

    #78246
    yoav zilberman
    משתתף

    ניסיון נוסף והפעם אני חושב שזה נכון:

    red,yellow,green,yellow,red,green,yellow,green,red,green,yellow,red,yellow,green.yellow,red,green,yellow,green,red

    האם עכשיו זה נכון?

    בברכה,

    יואב זילברמן

    #78233
    CodeGuru
    מנהל בפורום

    התשובה נכונה, כל הכבוד! ומי יכול למצוא סדרה ארוכה יותר (נניח 100) המקיימת

    אותו התנאי?

    #78229
    yoav zilberman
    משתתף

    כתבתי תוכנית קטנה שתמצא את המבוקש, בשביל למצוא עבור יותר איברים פשוט יש לשנות את גודל המערך ואת תנאי העצירה של הלולאה החיצונית ביותר.

    העיקרון שלי הוא נורא פשוט: כל צבע מקבל מספר שמסמל אותו- אדום=1, ירוק=2, צהוב=3

    אני מתנצל מראש על כך שהתוכנה לא יעילה לחלוטין וניתן לקצר את זמן פעולתה לכדי שורש שלישי!

    :

    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
    +",");
      }
      
     }
    }
    בברכה,

    יואב זילברמן

    #78228
    yoav 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=צהוב

    האם זה נכון?

    בברכה,

    יואב זילברמן!

מוצגות 7 תגובות – 1 עד 7 (מתוך 7 סה״כ)
  • יש להתחבר למערכת על מנת להגיב.