Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.52/29: Рейтинг темы: голосов - 29, средняя оценка - 4.52
0 / 0 / 0
Регистрация: 13.12.2014
Сообщений: 32
1

Подсчитать сколько элементов заданной последовательности делятся на три

29.09.2015, 18:00. Показов 5854. Ответов 25
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Рассмотрим последовательность 1, 12, 123, 1234, 12345, 123456, 1234567, 12345678, 123456789, 12345678910, 1234567891011, ....

Подсчитайте, сколько элементов этой последовательности среди первых n делятся на три.

Заранее спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.09.2015, 18:00
Ответы с готовыми решениями:

Подсчитать сколько в последовательности отрицательных и положительных элементов
Вводится последовательность чисел, 0 – конец последовательности. Подсчитать, сколько в ней...

Подсчитать, сколько раз в заданной последовательности символов встречается буква "x"
Кто сможет помочь написать код к задаче, пожалуйста. Даны натуральное число n, символы s1, ...,...

Определить, сколько в заданной последовательности положительных, отрицательных и нулевых элементов
Пожалуйста помогите!!! Не могу написать программу на C++.Имеется последовательность чисел,...

Найти числа из заданной последовательности, которые делятся на все числа из другой последовательности
Вход программы имеет следующий формат. Сначала вводится N > 0- количество чисел в...

25
4817 / 2278 / 287
Регистрация: 01.03.2013
Сообщений: 5,947
Записей в блоге: 28
29.09.2015, 18:27 2
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
using namespace std;
 
int main() {
    auto task = [](int i, int r, const auto& la) -> int {
        return i<=0 ? r : la(i-1, r+(i*(i+1)/2%3==0), la);};
    int n; cin>>n; cout<<task(n,0,task)<<'\n';
    return 0;
}
0
4817 / 2278 / 287
Регистрация: 01.03.2013
Сообщений: 5,947
Записей в блоге: 28
29.09.2015, 18:45 3
А кстати у меня в алгоритме ошибка. Щас исправлю.

Добавлено через 10 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
using namespace std;
 
int main() {
    auto ds = [](int i, int r, const auto& la) -> int {
        return i ? la(i/10, r+i%10, la) : r;};
    auto ds1n = [ds](int i, int r, const auto& la) -> int {
        return i ? la(i-1, r+ds(i,0,ds), la) : r;};
    auto task = [ds1n](int i, int r, const auto& la) -> int {
        return i<=0 ? r : la(i-1, r+(ds1n(i,0,ds1n)%3==0), la);};
    int n; cin>>n; cout<<task(n,0,task)<<'\n';
    return 0;
}
PS хотя на нескольких тестовых данных ответы совпали - или совпадение, иди некая арифметическая закономерность позволяет моему первому алгоритму выдавать правильные результаты, лень разбираться
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,882
29.09.2015, 18:48 4
_Ivana, надо на строках делать. по признаку. ибо последовательность слишком сильно растет.

мне вот только генератор ее интересен. только на человеческом.
0
4817 / 2278 / 287
Регистрация: 01.03.2013
Сообщений: 5,947
Записей в блоге: 28
29.09.2015, 18:50 5
daslex, НЕ надо на строках делать. ибо последовательность слишком сильно растет (С). Но подозреваю, что существует и другой, более быстрый алгоритм подсчета, чем я реализовал. Возможно, читающий тему zer0mail по традиции предложит хороший алгоритм, который будет работать на неприлично больших числах

Генератор тривиален - приписываем порядковый номер следующего числа к предыдущему справа - поциферно.
1
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,882
29.09.2015, 18:53 6
ну n = 20000 , сколько ? без строк, чисто на математике.
0
4817 / 2278 / 287
Регистрация: 01.03.2013
Сообщений: 5,947
Записей в блоге: 28
29.09.2015, 18:56 7
13333 у меня по второму алгоритму. щас по первому скажу.... тоже 13333. И вообще, похоже я выскажу гипотезу что это 2/3 от n
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,882
29.09.2015, 18:58 8
а то что там в числах больше 20000 цифр ниче так?
0
4817 / 2278 / 287
Регистрация: 01.03.2013
Сообщений: 5,947
Записей в блоге: 28
29.09.2015, 19:01 9
Ну я же не на строках делаю, у меня все нормально
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,882
29.09.2015, 19:07 10
Ну и как ты вмещаешь число с 20К цифрами в память, чтобы его на три поделить?

Добавлено через 3 минуты

Не по теме:

не пойми неправильно, я твои коды читать не умею. но кое на чем пытаюсь учиться. одно из этого вот эта тема.

0
4817 / 2278 / 287
Регистрация: 01.03.2013
Сообщений: 5,947
Записей в блоге: 28
29.09.2015, 19:07 11
daslex, вы исходите из неверных предпосылок, и естественно делаете неверные выводы. Я не вмещаю такие числа в память и не делю их на 3. Подключайте голову и/или смотрите моего кота.

Хорошо, не пойму неправильно. Вспоминаем признаки делимости на 3.
0
daslex
29.09.2015, 19:09
  #12

Не по теме:

надо тебя в Китай заслать, дать китайскую грамоту и сказать, чтоб учился :D

0
_Ivana
29.09.2015, 19:11
  #13

Не по теме:

Я уже пытаюсь учить одну такую грамоту - Haskell называется :) Попробуй - проникнешься. После него все мои сишные коты станут прозрачны и на ура читаться начнут :D

0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,882
29.09.2015, 19:48 14

Не по теме:

ты ее на Китайском учи, а иначе это не то, о чем я.



Добавлено через 18 минут

Не по теме:

Цитата Сообщение от _Ivana Посмотреть сообщение
Генератор тривиален
я не об этом. Как он идет понятно. Я о коде. хоть со своим котом, но выведи на экран первые 15 (саму последовательность, исходную). там уж как-нибудь разберусь дальше сам, наверное.



Добавлено через 10 минут
это типа интереснее чем 1 строчку кода написать.shank923,
C++
1
2
size_t n=20000;
   cout<<((n+1) + n) / 3;
0
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,495
Записей в блоге: 1
29.09.2015, 20:49 15
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <locale.h>
using namespace std;
int sumd(int N){
    int result=0;
    while(N){
        result+=N%10;
        N/=10;
    }
    return result;
}
int main() {
    setlocale(LC_ALL, "rus");
    int N, cnt=0, sumdigits=0;
    cout<<"введите N: ";
    cin>>N;
    for (int i=1; i<=N; ++i)
    {
        sumdigits+=sumd(i);
        if(sumdigits%3==0)cnt++;
    }
    cout<<endl<<"найдено чисел: "<<cnt<<endl; 
    getch();
    return 0;
}
Добавлено через 7 минут
Цитата Сообщение от _Ivana Посмотреть сообщение
#include <iostream> using namespace std; int main() { auto ds = [](int i, int r, const auto& la) -> int { return i ? la(i/10, r+i%10, la) : r;}; auto ds1n = [ds](int i, int r, const auto& la) -> int { return i ? la(i-1, r+ds(i,0,ds), la) : r;}; auto task = [ds1n](int i, int r, const auto& la) -> int { return i<=0 ? r : la(i-1, r+(ds1n(i,0,ds1n)%3==0), la);}; int n; cin>>n; cout<<task(n,0,task)<<'\n'; return 0; }
ФГМ функциональщина головного мозга. Мне вот интересно, тебе просто внешний вид такого кода нравится? Потому что других причин я не вижу.
Оптимизация? С рекурсией пролетает мимо.
Читаемость? Мимо.
Зачем в естественно-нерекурсивном алгоритме использовать рекурсию ради рекурсии?
Отладка? Опять мимо. Уж баг в цикле явно проще отловить!
Не первый человек уже за сегодня, которого тут встретил, который из-за школьных задачек упарывается лямбдами.
Попахивает намеренной обфускацией кода из вредности. Тебе нравится вредничать в разделе для новичков? Зачем тогда в него заходишь? Явно не с целью помочь...

Добавлено через 3 минуты
Цитата Сообщение от _Ivana Посмотреть сообщение
Я уже пытаюсь учить одну такую грамоту - Haskell называется Попробуй - проникнешься. После него все мои сишные коты станут прозрачны и на ура читаться начнут
ах вот оно что, Михалыч! Узнал про другой язык и решил посамоутверждаться, повыпендриваться перед нами, нубами. Некрасивое поведение... Не проще ли просто кратко и скромно написать коммент "зато я могу это сделать на Хаскелле"?

Добавлено через 4 минуты
Цитата Сообщение от daslex Посмотреть сообщение
ну n = 20000 , сколько ? без строк, чисто на математике.
daslex, признак делимости на 3 - сумма цифр делится на 3. Вывод, не нужно каждый раз генерировать новый член ряда, нужно к сумме цифр предыдущего прибавлять новые цифры. И никаких строк, никаких long ов, никаких китайских программ.
2
daslex
29.09.2015, 20:54
  #16

Не по теме:

Kuzia domovenok, мне интересен сам вывод этой последовательности. посимвольно.
задача решается в 1 строчку, без циклов, а это не то.

0
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,495
Записей в блоге: 1
29.09.2015, 20:56 17
Цитата Сообщение от daslex Посмотреть сообщение
Kuzia domovenok, мне интересен сам вывод этой последовательности. посимвольно.
задача решается в 1 строчку, без циклов, а это не то.
какая задача? При чём тут вывод последовательности?
0
805 / 532 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
29.09.2015, 20:58 18
Kuzia domovenok, ты обсолютно прав на счет товарища _Ivana.
Я вот вобще не понял, для чего ему нужно было писать
C++
1
2
auto task = [](int i, int r, const auto& la) -> int {
        return i<=0 ? r : la(i-1, r+(i*(i+1)/2%3==0), la);};
Да и вобще, я такого рода конструкции вобще впервые вижу.
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,882
29.09.2015, 21:01 19

Не по теме:

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
какая задача?
вот эта исходная задача: "Подсчитать сколько элементов заданной последовательности делятся на три" решается в одну строчку.

а вывод исходной последовательности 1,12,123... просто мне интересен. это уже отдельно от темы.



Добавлено через 2 минуты

Не по теме:

Ferrari F1, это лямбда функции. он из-за того что в них нет чистой рекурсии делает непрямую рекурсию. получается адская смесь лямбда+рекурсия и это полбеды. другая беда в бессмысленности именования данных.

0
_Ivana
29.09.2015, 22:55     Подсчитать сколько элементов заданной последовательности делятся на три
  #20

Не по теме:

И вот тут некоторые стали себе позволять нашивать накладные карманы и обуживать рукав...
:D Феерично :)

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.09.2015, 22:55

Ввести двумерный массив 4*4, подсчитать кол-во (+) и (-) элементов и вывести статистику по строкам, сколько (+), сколько (-) и подсчитать общую сумму
не получается никак сделать многомерный массив... помогите пожалуйста #include &lt;iostream&gt;...

Вывести на экран те числа, которые делятся на цело на три, но не делятся нацело на пять
Для чисел от 20 до 50 вывести на экран те из них ,которые делятся на цело на три ,но не делятся...

Сколько элементов последовательности делятся на три?
Рассмотрим последовательность 1, 12, 123, 1234, 12345, 123456, 1234567, 12345678, 123456789,...

Подсчитайте, сколько элементов последовательности среди первых n делятся на три
Рассмотрим последовательность 1, 12, 123, 1234, 12345, 123456, 1234567, 12345678, 123456789,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru