Kombinatoriikka, laskuharjoitukset I, tehtävä 1 ja 2

 

1. Montako lukujen 1000 ja 3500 välissä olevaa lukua voidaan muodostaa numeroista 1, 2, 3, 4, 5, 6, jos samaa numeroa saa käyttää useampia kertoja?

2. Montako lukujen 1000 ja 3500 välissä oleva lukua voidaan muodostaa numeroista 1, 2, 3, 4, 5, 6, jos kutakin numeroa saa käyttää vain kerran?

Ohjelma iteroi kaikki 1000-3500 luvut ja laskee vain sopivia, kun luvut oli kerran käytetty ja loput. komb_I_12 – suorita. Ennen python skriptin suorittamisen ActivePython pitäisi olla asenettu.


alku=1000
loppu=3500
pyk=4
#pyk=pykalien maara luvussa. pyk5 1000 on 01000

a=alku #Mista aloitetaan
count=0 #Laskuri, jossa pidetaan harvemmat [1234] tyypiset sarjat.
tupla=0 #Laskuri, jossa pidetaan loput sarjoista, eli sellaiset joissa [1222]
while (a<loppu): #Loppuraja, tehtavan mukaan 3500

	flag=1	#Oletetaan etta syklin aikana a mika tulee testatuksi on oletetusti sopiva, eliminoidaan sen jos se ei sopi myohemmin

	string=str(a).zfill(pyk) # mikali a=0 sanotaan etta siihen meni 4 nolla, eli 0000. Ei se kuuluu tehtavaan, mutta mikali kiinnosta tutkia 00xx-01xx tyypiset valit 0100 ei ole sama kun 100
	
	
	
	if (string.find('0')<>-1): # Nolla a:ssa ei kelpaa, jos se loytyy a on sopimaton
		flag=0
	if (string.find('7')<>-1): # Seiska
		flag=0
	if (string.find('8')<>-1): # 8
		flag=0
	if (string.find('9')<>-1): # 9kin. Kaikki muut numerot eivat muuta sita faktaa, etta a voi olla kelvollinen.
		flag=0
	
	if flag==1:#Nyt lasketaan 'valittuja' {1234} , ilman tuplia ja eliminoidan jotka on enemman kun yksi kerta a:ssa. Siis 1223 oli kelvoinen tahan asti,
		if (string.count('1')>1):
			flag=0
		if (string.count('2')>1): #ja nyt sen takia, etta kakkosia enemman kun yksi kertaa 1223:ssa
			flag=0
		if (string.count('3')>1):
			flag=0					#Eliminoi 1223 nayttiman etuja
		if (string.count('4')>1):
			flag=0
		if (string.count('5')>1):
			flag=0
		if (string.count('6')>1):
			flag=0
		if (flag==0):
			tupla=tupla+1 # Eliminoija - muistetaan tupliksi, siina 1223,1333,4323 - muut sellaiset kaverit.
			
		
		
	if (flag==1):
		count=count+1 #count, 1234,1243, "valittuja"
		
	a=a+1 #seuravaa ehdokas, ylarajan asti, jokainen keralla.
	
print count # valittuja
print tupla	# ilman 056789, ilman "valittuja"
raw_input("Paina ENTER jatkoksi")	# S