Ei ny ajatus oikeen kulje.. tällanen lukujono juttu. Eli otetaan joku luku, vaikka numero 1. No sitten pitäs saaha siitä lukujono, joka vähenee aina tietyllä määrällä tai prosentuaalisella osuudella (ihan sama kummin) ja että siitä tulis yhteensä se alkuperäinen luku. Siis esim.
Alkup. luku: 1
Lukujono: 0.4 + 0.3 + 0.2 + 0.1 = 1
Ton nyt sain ilman kaavoja kehitettyä, mutta miten saisin nyt vaikka tosta ykkösestä vastaavan lukujonon, niin että noita lukuja summattais vaikka sata yhteen.
Kun lasketaan yhteen n lukua, joista ensimmäinen on a, ja erotus kahden peräkkäisen luvun välillä on d, summa saadaan kaavalla:
n * (2a + (n - 1)d) / 2.
Jos summa on 1, n on 100 ja a yhtä kuin d, saadaan yhtälö:
100 * (d + 100d) / 2 = 1
5050d = 1
Mistä saadaan d = 1 / 5050.
Lukujono on siis 1 / 5050, 2 / 5050, 3 / 5050, ..., 100 / 5050, ellen aivan pahasti laskenut jossain pieleen.
Edit: Viilasin ensimmäistä kaavaa, se ei ollut äsken aivan yleisessä tapauksessa pätevä.
def sum_series(target, n, step): average = target / n if n % 2: first = average - (step * (n - 1) / 2) else: first = average - (step * n / 2) + 0.5 * step return [first + x * step for x in range(n)] def print_sum(items): print ' + '.join('%.1f' % x for x in items), '=', sum(items) # tulostaa: 0.1 + 0.2 + 0.3 + 0.4 = 1.0 print_sum(sum_series(1.0, 4, 0.1)) # tulostaa: 6.7 + 7.0 + 7.3 + 7.6 + 7.9 + 8.2 + 8.5 = 53.0 print_sum(sum_series(53.0, 7, 0.3))
Aihe on jo aika vanha, joten et voi enää vastata siihen.