Eenvoudig rekensommetje

Opgaven en tips voor programmeerwedstrijden.

Eenvoudig rekensommetje

Berichtdoor hbh-tieltjes » vr maart 06, 2009 6:58 pm

Twee getallen van 5 cijfers die met elkaar vermenigvuldigd moeten worden,
bevatten samen alle tien verschillende cijfers in willekeurige volgorde.
De 5 tussen produkten van 5 of 6 cijfers en het eindprodukt van 9 of 10
cijfers zijn steeds opgebouwd uit verschillende cijfers.
Op elke regel kan elk cijfer dus hoogstens één keer voorkomen.

Oplossing en programmalisting bij uitdager bekend.
Veel programmeer plezier van Herman Tieltjes.
hbh-tieltjes
 
Berichten: 53
Geregistreerd: di nov 11, 2008 11:44 am

Re: Eenvoudig rekensommetje

Berichtdoor Gordon » vr maart 06, 2009 10:54 pm

Kun je ons wat hintjes geven?
Ik weet niet waar te beginnen.

Gordon
Avatar gebruiker
Gordon
Site Admin
 
Berichten: 684
Geregistreerd: zo mei 22, 2005 12:50 am

Re: Eenvoudig rekensommetje

Berichtdoor hbh-tieltjes » za maart 07, 2009 10:30 am

voorbeeld
Code: Selecteer alles
1                #####      5 verschillende cijfers in willekeurige volgorde
2                ##### X    5 verschillende cijfers in willekeurige volgorde
3                #####      1e produkt 5 of 6 verschillende cijfers in willekeurige volgorde
4               #####       2e produkt 5 of 6 verschillende cijfers in willekeurige volgorde
5              #####        3e produkt 5 of 6 verschillende cijfers in willekeurige volgorde
6             #####         4e produkt 5 of 6 verschillende cijfers in willekeurige volgorde
7            #####      +   5e produkt 5 of 6 verschillende cijfers in willekeurige volgorde
8           ###########     eind produkt 9 of 10 verschillende cijfers in willekeurige volgorde

op regel 1 en 2 komen 10 verschillende cijfers voor 0 t/m 9 in willekeurige volgorde
op elke regel kan elk cijfer dus hoogstens één keer voorkomen
veel programmeer plezier

klik op wijzig want de tekst word in elkaar geschoven
hbh-tieltjes
 
Berichten: 53
Geregistreerd: di nov 11, 2008 11:44 am

Re: Eenvoudig rekensommetje

Berichtdoor hbh-tieltjes » vr maart 13, 2009 7:07 pm

Laat eens wat horen !!!

gr. Herman
hbh-tieltjes
 
Berichten: 53
Geregistreerd: di nov 11, 2008 11:44 am

Re: Eenvoudig rekensommetje

Berichtdoor anthonio » vr maart 13, 2009 7:17 pm

Hoi herman,

zoals gezegd ben ik geen wiskunde fan en na het lezen snap ik er nog steeds niet van.
Zou je eens een concreet voorbeeld kunnen geven met echte cijfers.

Alvast bedankt.
Dual boot: Ubuntu 8.04 - WIndows XP SP2 (via VMware) - Windows Vista 32bit - Toshiba L40 - Dual Core @ 1,76GHz - 1GB RAM - 120GB HDD - VDSL Connection
Avatar gebruiker
anthonio
 
Berichten: 281
Geregistreerd: zo mei 20, 2007 9:58 pm

Re: Eenvoudig rekensommetje

Berichtdoor hbh-tieltjes » vr maart 13, 2009 7:57 pm

voorbeeld
regel 1 12
regel 2 34
streep -- x
regel 3 48
regel 4 36
streep ----- +
regel 5 408

Dit dus, met de voorwaarden van hier boven.

gr Herman
hbh-tieltjes
 
Berichten: 53
Geregistreerd: di nov 11, 2008 11:44 am

Re: Eenvoudig rekensommetje

Berichtdoor Gordon » vr maart 13, 2009 8:24 pm

Bestaat een deel van de oplossing hieruit dat er een functie (of subroutine) is
waarmee de computer nagaat of een getal alleen uit verschillende cijfers bestaat?

Gordon.
Avatar gebruiker
Gordon
Site Admin
 
Berichten: 684
Geregistreerd: zo mei 22, 2005 12:50 am

Re: Eenvoudig rekensommetje

Berichtdoor hbh-tieltjes » vr maart 13, 2009 9:17 pm

Het is net zoals bij een sorteer rotine.
Je controleerd niet op hoger of lager,
maar of er dezelden zijn.
if a(x) = a(y) then .....
niet dudelijk dan hoor ik het wel

gr Herman
hbh-tieltjes
 
Berichten: 53
Geregistreerd: di nov 11, 2008 11:44 am

Re: Eenvoudig rekensommetje

Berichtdoor anthonio » za maart 14, 2009 1:01 pm

hbh-tieltjes schreef:voorbeeld
regel 1 12
regel 2 34
streep -- x
regel 3 48
regel 4 36
streep ----- +
regel 5 408

Dit dus, met de voorwaarden van hier boven.

gr Herman


dus als ik even goed begrijp:

regel 3 = 2 x 4 = 8
regel 3 = 1 x 4 = 4
regel 3 = 48
relgel 4 = 3 x 2 = 6
regel 4 = 3 x 1 = 3
regel 4 = 36
regel 5 = 8 + 0
regel 5 = 6 + 4
regel 5 = 3 + 1 (=1 komt van die 10 hierboven)
regel 5 = 408

groeten
Dual boot: Ubuntu 8.04 - WIndows XP SP2 (via VMware) - Windows Vista 32bit - Toshiba L40 - Dual Core @ 1,76GHz - 1GB RAM - 120GB HDD - VDSL Connection
Avatar gebruiker
anthonio
 
Berichten: 281
Geregistreerd: zo mei 20, 2007 9:58 pm

Re: Eenvoudig rekensommetje

Berichtdoor hbh-tieltjes » za maart 14, 2009 1:43 pm

12 x 34 = 408

******12
******34
******--- x vermenigvuldigen
******48**=**4x12
#***360**=**30x12*of**3x12*met een*0* er achter
****----- + optellen
#***408*****360+48=408**is dit duiselijk ?

***Dit zijn spaties omdat de tekst editer niet deugt schuif alles in elkaar.

gr. Herman
hbh-tieltjes
 
Berichten: 53
Geregistreerd: di nov 11, 2008 11:44 am

Re: Eenvoudig rekensommetje

Berichtdoor hbh-tieltjes » wo maart 18, 2009 5:31 pm

Zijn er al oplossingen ?
Moet ik wat tips of uitleg geven ?
Of is er geen intresse ?

gr Herman
hbh-tieltjes
 
Berichten: 53
Geregistreerd: di nov 11, 2008 11:44 am

Re: Eenvoudig rekensommetje

Berichtdoor anthonio » do maart 19, 2009 3:19 pm

Ik heb het genoteerd en ga vanavond es kijke of ik een oplossing vind.

groeten.
Dual boot: Ubuntu 8.04 - WIndows XP SP2 (via VMware) - Windows Vista 32bit - Toshiba L40 - Dual Core @ 1,76GHz - 1GB RAM - 120GB HDD - VDSL Connection
Avatar gebruiker
anthonio
 
Berichten: 281
Geregistreerd: zo mei 20, 2007 9:58 pm

Re: Eenvoudig rekensommetje

Berichtdoor Gordon » vr maart 20, 2009 12:34 am

Ik ben er nog niet aan begonnen.
Moet ik ook de permutaties vanaf 12345 x 12345 testen?
Of vanaf 12345 tot 67890
Is het kleinste getal 10234 of mag 01234 ook?

Gordon
Avatar gebruiker
Gordon
Site Admin
 
Berichten: 684
Geregistreerd: zo mei 22, 2005 12:50 am

Re: Eenvoudig rekensommetje

Berichtdoor bluatigro » vr maart 20, 2009 3:26 pm

hallo iedereen

n eerste aanzet :
Code: Selecteer alles
'maak cyfers
for i = 0  to 9
   nr$( i ) = str$( i )
next i
false = 0
true = not false
done = false
while not done
   'hier moet de permutatie algoritme komen .
   for i = 0 to 9
       swap nr$( i ) , nr$( rnd * 9.999 )
   next i
   a$ = "'
   b$ = ""
   '2 getalen van 5 cyfers .
   for i = 1 to 5
      a$ = a$ + nr$( i - 1 )
      b$ = b$ + nr$( i + 4 )
   next i
   a = val( a$ )
   b = val( b$ )
   for i = 1 to 5
      t$( i ) = str$( a * val ( mid$( b$ , i , 1 ) ) )
   next i
   uit =  a * b
   uit$ = str$( uit )
   if not verscil( uit$ ) then
      if not verscil( t$( 1 ) ) then
         if not verscil( t$( 2 ) ) then
            if not verscil( t$( 3 ) ) then
               if not verscil( t$( 4 ) ) then
                  if not verscil( t$( 5 ) ) then
                     done = true
                  end if
               end if
            end if
         end if
      end if
   end if
wend
'dit is nog niet netjes
print a$
print b$
for i = 1 to 5
   print t$( i ) ; left( "....." , i )
next i
print uit$

end

function verschil( q$ )
   fl = true
   for n = 0 to 9
      tel = 0
      for i = 1 to len( q$ )
         if mid$( q$ , i , 1 ) = str$( n ) then
            tel = tel + 1
            if tel > 1 then
               fl = false
            end if
         end if
      next i
   next n
   verschil = fl
end function '!! vb syntaks !!


de permutatie algoritme moet r nog in .
het belang van inspringen is nu wel duidelijk . :idea:

saluton blua tigro
bluatigro
 
Berichten: 306
Geregistreerd: za sep 27, 2008 6:01 pm

Re: Eenvoudig rekensommetje

Berichtdoor Gordon » vr maart 20, 2009 5:08 pm

Okay Blua Tigro,

Ik heb je listing alvast wat bijgewerkt.
Hier kunnen we misschien mee verder.

Code: Selecteer alles
'maak cyfers
for i = 0  to 9
   nr$( i ) = str$( i )
next i
false = 0
true = not(false)
done = false
while not(done)
   'hier moet de permutatie algoritme komen .
   for i = 0 to 9
        'swap nr$(i),nr$(int(rnd(0)*10))
        swapNumber = int(rnd(0)*10)
        swap$ = nr$(i) :nr$(i) = nr$(swapNumber): nr$(swapNumber) = swap$
   next i


   a$ = ""
   b$ = ""
   '2 getalen van 5 cyfers .
   for i = 1 to 5
      a$ = a$ + nr$( i - 1 )
      b$ = b$ + nr$( i + 4 )
   next i
   a = val( a$ )
   b = val( b$ )

    for i = 1 to 5
      t$( i ) = str$( a * val ( mid$( b$ , i , 1 ) ) )
      if t$(i) = "0" then t$(i)= "000000"
      t$(i) = right$("  "+t$(i),6)
   next i

   uit =  a * b
   uit$ = str$( uit )
   if not(verscil( uit$ )) then
      if not(verscil( t$( 1 ) )) then
         if not(verscil( t$( 2 ) )) then
            if not(verscil( t$( 3 ) )) then
               if not(verscil( t$( 4 ) )) then
                  if not(verscil( t$( 5 ) )) then
                     done = true
                  end if
               end if
            end if
         end if
      end if
   end if
wend

'dit is nog niet netjes
print tab(11);a$
print tab(11);b$
for i = 5 to 1 step -1
   print tab(10 - (5-i)); t$( i ) + left$( "....." , 5-i )
next i
print tab(4); right$("0000"+uit$,12)
print uit$

end

function verscil( q$ )
   fl = true
   for n = 0 to 9
      tel = 0
      for i = 1 to len( q$ )
         if mid$( q$ , i , 1 ) = str$( n ) then
            fl = false
         end if
      next i
   next n
   verscil = fl
end function '!! vb syntaks !!



Not is bij LB een functie, dus not(
Int(rnd(0)*10) geeft cijfers van 0 tot 9
Ik heb nog enkele typo's gecorrigeerd.
Ik heb geen SWAP functie gemaakt, maar gewoon op die ene plek
in de listing een stukje swap code opgeschreven.

Gordon
Edit: Ik heb de output wat netter gemaakt
Avatar gebruiker
Gordon
Site Admin
 
Berichten: 684
Geregistreerd: zo mei 22, 2005 12:50 am

Volgende

Keer terug naar Uitdagingen en wedstrijden

Wie is er online

Gebruikers op dit forum: Geen geregistreerde gebruikers. en 1 gast

cron