Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
$k = 0;
for (; $k <= $iLength / 2; $k++) {
# генерирует массивы из n элементов с суммой чисел s
from functools import reduce
def gen_sum(n, s, base=10):
if s == 0:
yield [0] * n
return
if n == 2:
for i in range(max(s - base + 1, 0), min(s, base)):
yield [i, s - i]
else:
for i in range(0, min(s, base)):
for sub in gen_sum(n - 1, s - i):
yield [i] + sub
def gen_lucky(n=3, base=10):
for s in range(0, n * (base - 1) + 1):
for lucky1 in gen_sum(n, s, base):
for lucky2 in gen_sum(n, s, base):
yield reduce(lambda a,b: a + str(b), lucky1 + lucky2, '')
for i in gen_lucky():
print(i)
static void PrintHappy(int HalfLength,int Base) {
Happy("",0,HalfLength,Base);
}
static void Happy(string str,int Sum,int HalfLength,int Base) {
int ndig=str.Length;
if(ndig<HalfLength) {
for(int u=0;u<Base;u++) Happy(str+u.ToString(),Sum+u,HalfLength,Base);
} else if(ndig<2*HalfLength) {
int maxsum=(2*HalfLength-ndig-1)*(Base-1);
for(int u=Math.Max(0,Sum-maxsum);u<=Math.Min(Sum,Base-1);u++) {
Happy(str+u.ToString(),Sum-u,HalfLength,Base);
}
} else Console.WriteLine(str);
}
#include<stdio.h>
void main(){
int A[100],k,s,i;
int L=3,Base=10;
A[0]=s=k=0;
for(;;){
if(A[k]==Base || s<0){
if(k==0) break;
s+=A[k]*((k/L)*2-1);
A[--k]++;
s-=(k/L)*2-1;
}else if(k==2*L-1){
for(i=0;i<=k;i++) putchar(A[i]+'0');
putchar('\n');
A[k]++; s--;
}else{
k++;
A[k]=s-(2*L-1-k)*(Base-1);
if(A[k]<0) A[k]=0;
s-=A[k]*((k/L)*2-1);
}
}
}
Генерация номеров счастливых билетов