Reaali Robootika.COM

NXT robotimaailm ja programmeerimine C-keeles

KRONA + KRONA + KRONA = FRANK

Ramsesele anti koolis selline ülesanne:


KROMA
KROMA
+KROMA
-----------
FRANK

Ramses ja Leivo lahendasid seda tahvlijuures otsides seoseid ja värki, samal ajal kirjutasin mina C#-pis programm selle lahendamiseks.

Code Snippet
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6. namespace Project_FRANK
  7. {
  8.     class Program
  9.     {
  10.         static void Main(string[] args)
  11.         {
  12.             int F;
  13.             int K;
  14.             int R;
  15.             int O;
  16.             int A;
  17.             int N;
  18.             int res;
  19.             int res2;
  20.             for (F = 1; F < 10; F++)
  21.             {
  22.                 for (K = 1; K < 10; K++)
  23.                 {
  24.                     for (R = 0; R < 10; R++)
  25.                     {
  26.                         for (O = 0; O < 10; O++)
  27.                         {
  28.                             for (A = 0; A < 10; A++)
  29.                             {
  30.                                 for (N = 0; N < 10; N++)
  31.                                 {
  32.                                     res = K * 10000 + R * 1000 + O * 100 + N * 10 + A;
  33.                                     res2 = F * 10000 + R * 1000 + A * 100 + N * 10 + K;
  34.                                     if (res * 3 == res2 & F != K & F != R & F != O & F != A & F != N & K != R & K != O & K != A & K != N & R != O & R != A & R != N & O != A & O != N & A != N)
  35.                                     {
  36.                                         Console.WriteLine(res);
  37.                                         Console.WriteLine(res2);
  38.                                         Console.WriteLine("************");
  39.                                     }
  40.                                 }
  41.                             }
  42.                         }
  43.                     }
  44.                 }
  45.             }
  46.             Console.ReadLine();
  47.         }
  48.     }
  49. }
See töötab. Päris kiiresti.

Rao.

Comments (5) -

  • Simmo

    2/25/2012 4:39:39 PM | Reply

    See on ühekordne väga naiivne lahendus: palju käsitsi tööd (eriti suuremate selliste ülesannete puhul).

    Kirjutasin C++11-s üldkujulise lahenduse, kus piisab vaid ise tingimuse muutmisest ning kõik muu toimib igal juhul: http://ideone.com/3ZoUt

  • Leivo

    2/26/2012 3:03:34 AM | Reply

    Simmo, kuidas Sinu kood Visual Studiole selgeks teha?
    Ridadel 38 ja 48 olev for tsükkel on VS-i jaoks arusaamatu. Ja samuti eeldab VS, et pow-funktsioon tagastab midagi enamat kui int, näiteks double või float.

    Aga meie näite puhul oli pigem see, et kas Ramses saab rutem tahvlil või Rao Visual Studioga. Põhimõtteliselt said nad valmis samal ajal. kuid mõlema jaoks oli vaja lisada täiendus, et number vüib ka 0 olla. Selle olid mõlemad jätnud alguses arvestamata.

  • Simmo

    2/26/2012 10:29:56 PM | Reply

    Rao ja minu lahenduste erinevust demonstreerib üsna hästi selline koomiks: http://xkcd.com/974/

  • Rao Zvorovski

    3/4/2012 6:59:45 PM | Reply

    Alguses ma ei kirjutanud seda unikaalsuse testi sisse, vaid panin sinna lihtsalt VS debug värgi sisse ja vaatasin kas nad on kõik erinevad. Hiljem kirjutasin need copy-paste meetodil sisse. Ka for tsüklite copy-paste ei võta aega. Tegelikult oli Ramses seda juba ~50 min teinud, kui ma alustasin.

Add comment

Loading