Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Олимпиады

Страница: 1 |

 

  Вопрос: Любопытная задачка Добавлено: 22.01.05 22:22  

Автор вопроса:  Sharp | Web-сайт: sharpc.livejournal.com | ICQ: 216865379 
По заданному N найти все уникальные наборы чисел a[1..N] такие, что 1/a[1] + 1/a[2] + ... + 1/a[N] = 1. Перестановки не учитывать.
Пример:
N=3
2 3 6
2 4 4
3 3 3
Еще один вопрос, больше теоретический. Предполагая, что ни одно число не выходит за границы типа Long, определить накладываемый этим условием предел на N.

Ответить

  Ответы Всего ответов: 9  

Номер ответа: 1
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #1
Добавлено: 23.01.05 17:19
Ну вот, я думал, хоть кто-нибудь решит... Вот мое решение:
/*
По заданному N найти все уникальные наборы чисел a[1..N] такие, что 1/a[1] + 1/a[2] + ... + 1/a[N] = 1. Перестановки не учитывать.
20 января 2005 года © Остапенко Денис
*/

#include "stdio.h"

int res[20][10000], lp=0, n;

void simplize(int *nom, int *den){
int t1 = *nom, t2 = *den, t;
while(t1%t2){
t1 = t1%t2;
t = t1;
t1 = t2;
t2 = t;
}
*nom /= t2;
*den /= t2;
}

void calc(int nom, int den, int ns){
int i;
if(ns == 1){
if(nom ==1){
res[n-ns][lp] = den;
lp++;
for(i=0; i<n; i++) res[lp] = res[lp-1];
}
return;
}
else{
i=n-ns?res[n-ns-1][lp]:2;
while(den >= nom*i) i++;
while(ns*den >= i*nom){
res[n-ns][lp] = i;
int nnom, nden;
nnom = nom*i - den;
nden = den * i;
simplize(&nnom, &nden);
calc(nnom, nden, ns-1);
i++;
}
}
}

int checkdouble(){
int u=1, i, j, k;
for(k=0; k<n; k++) printf("%d\t", res[k][0]);
printf("\n";);
for(i=1; i<lp; i++){
for(j=0; j<n; j++){
if(res[j] != res[j][i-1]) break;
}
if(j < n){
for(k=0; k<n; k++) printf("%d\t", res[k]);
printf("\n";);
u++;
}
}
return u;
}

void main(){
printf("Enter N: ";);
scanf("%d", &n);
calc(1, 1, n);
printf("%d\n", checkdouble());
}

Максимальное N = 6.

Ответить

Номер ответа: 2
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #2
Добавлено: 23.01.05 21:52
Че-то длинно :) Я уже решал, у мня короче кажись... тоже писал на Си, но исходника найти не смог :(

Ответить

Номер ответа: 3
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #3
Добавлено: 23.01.05 22:32
Ну, можно провести хакеризацию этого кода, он станет раза в 4 меньше :)

Ответить

Номер ответа: 4
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #4
Добавлено: 24.01.05 01:32
:)) во, что-то похожее на дело :))

Кстати, есть индивидумы, по-крайней мере у нас в группе таковые существовали, что все писали в одну единственную строчку :)

Мне бывало жаль нашего преподователя ;)

Ответить

Номер ответа: 5
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #5
Добавлено: 24.01.05 02:08
Глянь сюда: www.ioccc.org :)

Ответить

Номер ответа: 6
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #6
Добавлено: 24.01.05 10:45
Нащ препор после многолетних тренировок любой (почти) обфускатор опустит ;) с таким-то опытом ;)

Ответить

Номер ответа: 7
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #7
Добавлено: 24.01.05 12:50
Маза собрать воедино все известные методы обфускации исходного кода на всех языках и выпустить, как шутливую статью "Как нужно писать программы".

Ответить

Номер ответа: 8
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #8
Добавлено: 24.01.05 15:33
:)) Это как был прикол про то как придумали синтаксис Си языка :)

Ответить

Номер ответа: 9
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #9
Добавлено: 25.01.05 00:43
Да, наслышан, хотя на самом деле история куда более прозаическая

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам