- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
class PseudoVamp {
public int num;
public boolean truevamp = false;
public int x;
public int y;
public int n1;
public int n2;
public int n3;
public int n4;
void breaknsort() {
n1 = num % 10;
n2 = num / 10 % 10;
n3 = num / 100 % 10;
n4 = num / 1000;
int tmp;
for (int i = 0; i < 4; i++) {
if (n1 > n2) {
tmp = n1;
n1 = n2;
n2 = tmp;
}
if (n2 > n3) {
tmp = n2;
n2 = n3;
n3 = tmp;
}
if (n3 > n4) {
tmp = n3;
n3 = n4;
n4 = tmp;
}
}
}
public PseudoVamp(int a, int b) {
x = a;
y = b;
num = x * y;
breaknsort();
}
}
public class Test {
static void checkvamp(PseudoVamp vamp) {
int x1 = vamp.x % 10;
int x2 = vamp.x / 10;
int y1 = vamp.y % 10;
int y2 = vamp.y / 10;
int tmp;
for (int i = 0; i < 4; i++) {
if (x1 > x2) {
tmp = x1;
x1 = x2;
x2 = tmp;
}
if (x2 > y1) {
tmp = x2;
x2 = y1;
y1 = tmp;
}
if (y1 > y2) {
tmp = y1;
y1 = y2;
y2 = tmp;
}
}
if (vamp.n1 == x1 && vamp.n2 == x2 && vamp.n3 == y1 && vamp.n4 == y2)
vamp.truevamp = true;
}
public static void main(String[] args) {
for (int i = 11; i < 100; i++) {
for (int j = 11; j < 100; j++) {
PseudoVamp v = new PseudoVamp(i, j);
if (v.num < 1000)
continue;
if (v.num > 9999)
return;
checkvamp(v);
if (v.truevamp)
System.out.println(v.x + " * " + v.y + " = " + v.num);
}
}
}
}
A vampire number has an even number of digits and is formed by multiplying a pair of numbers containing half the number of digits of the result. The digits are taken from the original number in any order. Pairs of trailing zeroes are not allowed. Examples include:
1260 = 21 * 60
1827 = 21 * 87
2187 = 27 * 81
Write a program that finds all the 4-digit vampire numbers.
w/o using of arrays.
Lure Of Chaos 15.08.2011 15:54 # +2
так что, новая формула для гетов, товарищи.
roman-kashitsyn 15.08.2011 17:58 # 0
Уже не прокатит, 6880 - максимальное.
Lure Of Chaos 15.08.2011 18:06 # 0
roman-kashitsyn 15.08.2011 18:11 # 0
roman-kashitsyn 15.08.2011 17:39 # 0
Esper 15.08.2011 17:47 # +1
roman-kashitsyn 15.08.2011 17:59 # 0
roman-kashitsyn 15.08.2011 17:52 # 0
Вывод:
scriptin 15.08.2011 18:10 # 0
roman-kashitsyn 15.08.2011 18:12 # +1
ch0sen 16.08.2011 01:11 # 0
Но гораздо интересней работать только с числами, без массивов / списков. Попробуйте =)
Не "говнорешение" у меня укладывается в 28 строк.
roman-kashitsyn 16.08.2011 09:25 # 0
ch0sen 16.08.2011 10:46 # +1
Но "самостоятельность" все равно в таком случае никуда не убрать:
roman-kashitsyn 16.08.2011 11:01 # 0
ch0sen 17.08.2011 03:21 # 0
это решение конкретной задачи. Для маштабирования нужны списки полюбому.
scriptin 16.08.2011 14:36 # 0
Вот математический способ проверить, совпадают ли все цифры в двух числах (JS):
Вот тесты:
Lure Of Chaos 16.08.2011 14:39 # 0
уж не проще ли обойтись без математики, а обращаться с числами как со строками?
scriptin 16.08.2011 15:02 # 0
roman-kashitsyn 16.08.2011 15:06 # +1
scriptin 16.08.2011 15:17 # 0
roman-kashitsyn 16.08.2011 15:19 # +1
scriptin 16.08.2011 15:25 # +1
Видите ли, ваш код на Haskell неподготовленному человеку еще менее понятен. Хотя, конечно, я считаю такой код в функциональном стиле более выразительным, чем та императивная каша, что я написал.
ch0sen 17.08.2011 03:19 # +1
а вот JS вроде как и лучше дожен воспринимать, так наоборот нифига не понял каким образом оно решает поставленную задачу...
roman-kashitsyn 17.08.2011 10:04 # 0
CPPGovno 17.08.2011 10:32 # −3
scriptin 17.08.2011 12:28 # 0
roman-kashitsyn 17.08.2011 13:16 # 0
scriptin 17.08.2011 18:21 # 0
С чего это? order - это число цифр в десятичной записи, которые нам нужно рассмотреть. Избавиться от него мы не можем.
К тому же, мы проверяем совпадение всех цифр в числе без учета их позиции, поэтому отсекать по принципу "разные порядки" мы не можем - если вы это имели в виду под "порядки разные".
>Особо порадовала идея использовать числа как небольшие битовые карты =)
Именно благодаря этому я смог уйти от массивов. Другого способа отмечать найденные совпадения я не придумал.
bugmenot 17.08.2011 19:22 # 0
how much watch?
roman-kashitsyn 17.08.2011 20:45 # 0
Ещё как можем. Какой смысл сравнивать 12345 с 1234? Число цифр в десятичной записи у них разное, поэтому совпадать наборы цифр не могут априори. Вы и сами без труда сможете написать функцию определения числа десятичных знаков в записи числа:
> Именно благодаря этому я смог уйти от массивов
Спасибо, кэп )
roman-kashitsyn 17.08.2011 20:52 # 0
scriptin 17.08.2011 20:59 # 0
roman-kashitsyn 16.08.2011 14:41 # 0
Ответы выдаёт верные, но код работает очень медленно (скорее всего, его тормозит вычисление всевозможных перестановок цифр, которые у вас вычислены ручками, ибо замена Integer на Int ничего не изменила).
Исходный вариант решает задачу за 0.012 сек, этот - за 3.253 сек.
Решения задачи этим вариантом для размерности 6 я не дождался, исходный вариант считает задачу этой размерности 1 сек. Ваш вариант на java у меня отрабатывает за 0.035 сек.
p.s. неделя бенчмарков на ГК
Lure Of Chaos 16.08.2011 14:43 # 0
week PseudoTroll {}
}
roman-kashitsyn 16.08.2011 14:53 # 0
Lure Of Chaos 16.08.2011 14:57 # 0
roman-kashitsyn 16.08.2011 15:00 # 0
Lure Of Chaos 16.08.2011 15:01 # 0
roman-kashitsyn 16.08.2011 14:49 # 0
Lure Of Chaos 16.08.2011 16:17 # 0
ch0sen 17.08.2011 03:29 # 0
Я конечно плохо незнаю хаскель, но тут явное читерство :-P
общего решения, мне кажется, простой арифметикой не добиться
roman-kashitsyn 17.08.2011 09:49 # 0
scriptin 17.08.2011 12:29 # 0