Форум программистов, компьютерный форум CyberForum.ru

Арифметическая прогрессия в массиве - C++

Восстановить пароль Регистрация
 
gamer0n
0 / 0 / 0
Регистрация: 27.12.2012
Сообщений: 47
13.06.2013, 11:57     Арифметическая прогрессия в массиве #1
Дан целочисленный массив размером N, который не содержит одинаковых чисел. Проверить, образуют ли его элементы арифметическую прогрессию. Если да, то вывести разницу прогрессии, если нет то вывести 0.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.06.2013, 11:57     Арифметическая прогрессия в массиве
Посмотрите здесь:

арифметическая операция C++
Арифметическая прогрессия C++
C++ Арифметическая прогрессия
C++ Арифметическая прогрессия
Арифметическая прогрессия C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Пaтрик
 Аватар для Пaтрик
394 / 387 / 38
Регистрация: 21.01.2012
Сообщений: 972
Завершенные тесты: 1
13.06.2013, 12:05     Арифметическая прогрессия в массиве #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
 
template <typename T, typename Iterator>
T difference(Iterator first, Iterator last)
{
    if (first == last)
        return 0;
    if (first + 2 == last)
        return *(first + 1) - *first;
    Iterator next = first + 1;
    T diff = *next - *first;
    while (next != last)
        if (*next++ - *first++ != diff)
            return 0;
    return diff;
}
 
int main()
{
    int a[] = { 1, 3, 5, 7, 9, 11, 13 };
    std::cout << difference<int>(std::begin(a), std::end(a)) << std::endl;
    return 0;
}
gamer0n
0 / 0 / 0
Регистрация: 27.12.2012
Сообщений: 47
13.06.2013, 12:09  [ТС]     Арифметическая прогрессия в массиве #3
Цитата Сообщение от Пaтрик Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
 
template <typename T, typename Iterator>
T difference(Iterator first, Iterator last)
{
    if (first == last)
        return 0;
    if (first + 2 == last)
        return *(first + 1) - *first;
    Iterator next = first + 1;
    T diff = *next - *first;
    while (next != last)
        if (*next++ - *first++ != diff)
            return 0;
    return diff;
}
 
int main()
{
    int a[] = { 1, 3, 5, 7, 9, 11, 13 };
    std::cout << difference<int>(std::begin(a), std::end(a)) << std::endl;
    return 0;
}
Не запускается не в висуале не в билдере....
Пaтрик
 Аватар для Пaтрик
394 / 387 / 38
Регистрация: 21.01.2012
Сообщений: 972
Завершенные тесты: 1
13.06.2013, 12:15     Арифметическая прогрессия в массиве #4
http://ideone.com/adc7Dj
stawerfar
 Аватар для stawerfar
140 / 54 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
13.06.2013, 12:19     Арифметическая прогрессия в массиве #5
Это лишь по тому что наш многоуважаемый Патрик написал вам код в недавно вышедшем стандарте C++ 11
Вот для старого стандарта
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
#include <iostream>
#include <iterator>
 
template <typename T, typename Iterator>
T difference(Iterator first, Iterator last)
{
    if (first == last)
        return 0;
    if (first + 2 == last)
        return *(first + 1) - *first;
    Iterator next = first + 1;
    T diff = *next - *first;
    while (next != last)
        if (*next++ - *first++ != diff)
            return 0;
    return diff;
}
 
int main()
{
 
    int a[] = { 1, 3, 5, 7, 9, 11, 13 };
    std::cout << difference<int>(a, a + sizeof(a) / sizeof(a[0]) ) << std::endl;
    return 0;
}
gamer0n
0 / 0 / 0
Регистрация: 27.12.2012
Сообщений: 47
14.06.2013, 09:02  [ТС]     Арифметическая прогрессия в массиве #6
Спасибо, но когда я запускаю ее в билдере - выводит цифру 2 и все, вводу не подлежит
Пaтрик
 Аватар для Пaтрик
394 / 387 / 38
Регистрация: 21.01.2012
Сообщений: 972
Завершенные тесты: 1
14.06.2013, 09:41     Арифметическая прогрессия в массиве #7
gamer0n, а ты что хотел?
gamer0n
0 / 0 / 0
Регистрация: 27.12.2012
Сообщений: 47
14.06.2013, 09:48  [ТС]     Арифметическая прогрессия в массиве #8
Цитата Сообщение от Пaтрик Посмотреть сообщение
gamer0n, а ты что хотел?
по крайней мере ввод размерности массива, вывод этого массива на экран, ну и вывод 0 или разницу прогрессии. Эт так, чисто элементарщина
Expocooky
 Аватар для Expocooky
56 / 56 / 2
Регистрация: 06.06.2013
Сообщений: 112
14.06.2013, 10:11     Арифметическая прогрессия в массиве #9
Цитата Сообщение от gamer0n Посмотреть сообщение
по крайней мере ввод размерности массива, вывод этого массива на экран, ну и вывод 0 или разницу прогрессии. Эт так, чисто элементарщина
Ну так элементарщину сам наверно напишешь? Самое сложное за тебя уже сделали
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.06.2013, 10:20     Арифметическая прогрессия в массиве
Еще ссылки по теме:

C++ арифметическая прогрессия
Арифметическая прогрессия C++
Одномерные массивы. Найти есть ли в нем арифметическая прогрессия состоящая из трех элементов C++

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

Или воспользуйтесь поиском по форуму:
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
14.06.2013, 10:20     Арифметическая прогрессия в массиве #10
вариант с рекурсией:
C
1
2
3
4
5
6
7
8
9
10
11
12
int Check(int *a, int *end, int d)
{
   return a + 1 < end ? (*(a + 1) - *a == d) && Check(a + 1, end, d) : 1;
}
 
int main()
{
   int a[] = {1, 4, 7, 10}, n;
   n = sizeof(a) / sizeof(*a);
   printf("%d\n", Check(a, a + n, *(a + 1) - *a) ? *(a + 1) - *a : 0);
   return 0;
}
Yandex
Объявления
14.06.2013, 10:20     Арифметическая прогрессия в массиве
Ответ Создать тему
Опции темы

Текущее время: 20:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru