88 / 84 / 31 Регистрация: 18.11.2013 Сообщений: 390 |
|
1 |
|
18.11.2013, 19:42. Показов 11103. Ответов 6
Итак, наткнулся недавно на такую хитрую, на первый взгляд лёгкую ззадачу, но, попробывав её решить, начал очень сильно напрягаться.
0 |
Байт Диссидент 27488 / 17175 / 3784 Регистрация: 24.12.2010 Сообщений: 38,685 |
||||
18.11.2013, 20:24 |
2 |
|||
Решение
0 |
easybudda Модератор 11885 / 7258 / 1720 Регистрация: 25.07.2009 Сообщений: 13,276 |
||||||||
19.11.2013, 01:09 |
3 |
|||||||
РешениеKrock21rus, тут эту «хитрую» задачу уже как только не решали.
Если нужно узнать, есть ли именно две одинаковых цифры, в коде Байт восьмая строка
0 |
Thinker 4265 / 2239 / 203 Регистрация: 26.08.2011 Сообщений: 3,802 Записей в блоге: 5 |
||||
19.11.2013, 13:04 |
4 |
|||
1 |
Диссидент 27488 / 17175 / 3784 Регистрация: 24.12.2010 Сообщений: 38,685 |
|
19.11.2013, 13:43 |
5 |
Thinker, Класс!
1 |
Ryuk 183 / 182 / 56 Регистрация: 10.06.2011 Сообщений: 871 |
||||||||
19.11.2013, 18:02 |
6 |
|||||||
Thinker, что-то я не догнал по поводу
, не могли бы разъяснить? И как будет выполняться цикл
Пока переменная не <= нулю или до каких пор выполняется цикл?
0 |
Байт Диссидент 27488 / 17175 / 3784 Регистрация: 24.12.2010 Сообщений: 38,685 |
||||
19.11.2013, 19:18 |
7 |
|||
<= нулю
А вообще если есть вопросы по поводу этого замечательного кода, возьмите в зубы отладчик и аккуратненько по циклу пройдитесь Добавлено через 49 секунд
1 |
You can do it with by casting the int in list of strings representing each digits and add the number of duplicate elements:
def two_identical(start, finish):
counter=0
for i in range(start+1,finish,1):
#Convert the digit in list of str. e.g 100 => ['1','0','0']
i=[digit for digit in str(i)]
#add the len of set of duplicate =>
#e.g.: ['4', '9', '9', '7', '7'] => {'9','7'} => counter +=2
#e.g.: ['4', '9', '9', '9', '7'] => {'9'} => counter +=1
#e.g.:['4', '9', '9', '9', '4'] => {'9','4'} => counter +=2
counter+=len(set([x for x in i if i.count(x) >1]))
print(f"counter ({start},{finish}):{counter}")
return counter
try:
assert two_identical(20, 33) == 1
assert two_identical(0, 10) == 0
assert two_identical(0, 101) == 10
assert two_identical(0, 1000) == 261
assert two_identical(5000, 50000) == 35198
except AssertionError:
print("TEST ERROR")
#traceback.print_exc()
else:
print("TEST PASSED")
result:
counter (20,33):1
counter (0,10):0
counter (0,101):10
counter (0,1000):261
counter (5000,50000):35198
TEST PASSED
Формулировка задачи:
Итак, наткнулся недавно на такую хитрую, на первый взгляд лёгкую ззадачу, но, попробывав её решить, начал очень сильно напрягаться.
Сейчас же почти сделал эту программу и хочу поделится(ну и попросить её доделать)этой задачей
Итак: Необходимо написать программу, на ввод которая получает число, а на выводе отвечает, есть ли в этом числе 2 одинаковые цифры, или нет
Как говорю, задача очень хитрая и над ней нужно сильно подумать, кому нужно могу отправить то что я смог сделать, пишите в скайп: Krock21rus
P.s. Задача для 8 класса
Код к задаче: «Определить, есть ли в числе 2 одинаковые цифры»
textual
#include <stdio.h> int have_same_digits(unsigned n) { if ( n > 9 ) { unsigned last = n % 10; unsigned left = n / 10; while ( left ) { if ( last == ( left % 10 ) ) return 1; left /= 10; } return have_same_digits(n / 10); } else return 0; } int main(void) { unsigned n; while ( printf("Number: ") && scanf("%u", &n) == 1 ) printf("%sn", ( have_same_digits(n) ) ? "YES" : "NO"); return 0; }
Полезно ли:
11 голосов , оценка 4.182 из 5
Дан массив с числами. Проверьте, есть ли в нём два одинаковых числа подряд.
Если есть — выведите ‘да’, а если нет — выведите ‘нет’
Моё решение такое:
var arr = [3, 1, 1, 12];
for (var i = 0; i > arr.length; i++) {
for (var j = i + 1; j > arr.length; j++) {
if (arr[i] === arr[j]) {
alert('yes')
} else {
alert('no')
}
}
Но ничего не выводит alert
. В чём проблема?
Bharatha
5,2561 золотой знак18 серебряных знаков36 бронзовых знаков
задан 6 июн 2018 в 9:09
1
Проблема в том, что ты делаешь вывод для каждого числа в массиве. В случае нахождения подходящей пары надо прекращать проверку. А для неподходящих пар вообще ничего делать не надо.
function check(a) {
for (var q=1; q<a.length; ++q) {
if (a[q] === a[q-1]) {
return true;
}
}
return false;
}
console.log(check([3, 1, 1, 12]) ? "Да" : "Нет");
ответ дан 6 июн 2018 в 9:26
Qwertiy♦Qwertiy
121k24 золотых знака121 серебряный знак291 бронзовый знак
[3, 1, 1, 12].reduce((a, b) => (typeof a === 'number' && typeof b === 'number' && a === b ? console.info('Yes') : null, b), null);
ответ дан 6 июн 2018 в 9:15
3
Можно воспользоваться функцией Array.prototype.some
// Дословно:
// Существует ли элемент(не являющийся первым) равный предыдущему?
const hasSeqEq = arr => arr.some((el, i, arr) => i!=0 && el===arr[i-1]);
console.log(hasSeqEq([5, 1, 5, 2])); // false
console.log(hasSeqEq([5, 1, 5, 2, 2, 7])); // true
Преимущество some
перед reduce
заключается в том, что, если будет найдено совпадение, результат будет получен сразу же, не завершая прохода всего массива.
ES5:
// Дословно:
// Существует ли элемент(не являющийся первым) равный предыдущему?
function hasSeqEq(arr) {
return arr.some(function(el, i, arr) {
return i != 0 && el === arr[i - 1];
});
}
console.log(hasSeqEq([5, 1, 5, 2])); // false
console.log(hasSeqEq([5, 1, 5, 2, 2, 7])); // true
ответ дан 6 июн 2018 в 9:32
vp_arthvp_arth
27.1k2 золотых знака45 серебряных знаков76 бронзовых знаков
11
function f(arr) {
for (let i = 0; i < arr.length; i++) {
if (arr.indexOf(arr[i]) !== arr.lastIndexOf(arr[i])) {
return true
}
}
return false
}
let arr = [1, 2, 3, 4, 5, 6, 4, 8];
console.log(f(arr))
ответ дан 17 ноя 2020 в 18:47
KrovorgenKrovorgen
7684 серебряных знака16 бронзовых знаков
Проблема в том, что вы написали неправильное условие выхода из цикла.
i > arr.length
— возвращает false на первой же проверке и цикл заканчивается не сделав ни одной итерации.
var arr = [3, 1, 1, 12];
for (var i = 0; i < arr.length; i++){
for (var j = i + 1; j < arr.length; j++){
if (arr[i] === arr[j]){
alert('yes')
} else {
alert('no');
}
}
}
ответ дан 6 июн 2018 в 9:12
DarthDarth
13k2 золотых знака25 серебряных знаков56 бронзовых знаков
Сергей и Игорь изучают четырёхзначные числа, первая цифра которых 9 (т.е. числа вида ). Они хотят выписать все четырёхзначные числа, у которых есть ровно две одинаковые цифры. Помогите им определить, сколько таких чисел.
Источник задачи:
http://www.uni.bsu.by/arrangements/imct … _baz69.pdf
(задача №2 для 6-го класса).
У меня такое ощущение, что автор задачи пытается своим условием «запутать врага». С одной стороны, в первом предложении условия говорится о числах, начинающихся на 9, а с другой, во втором предложении речь идёт обо всех четырёхзначных числах.
Если речь только о числах, начинающихся с девятки, то мне кажется, что ответ будет 432, поскольку всего возможно только 6 случаев: , где
— различные цифры, не равные 9. В каждом из этих 6 случаев будет по 72 варианта, итого 432.
У меня правильно или что-то упущено?
P. S. А если всё-таки не только начинающиеся с девятки посчитать, будет , да? Ведь если девятку заменить любой другой ненулевой цифрой, суть задачи не изменится, правда?