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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.60
Vivo
23 / 23 / 2
Регистрация: 27.09.2009
Сообщений: 101
#1

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

11.02.2011, 21:39. Просмотров 1840. Ответов 8
Метки нет (Все метки)

Здравствуйте, помогите со способом выполнения задания. Задание: Пользователь задает n кол-во целых чисел, необходимо определить можно ли расположить эти числа в ряд так, чтобы ряд был арифметической прогрессией.
У меня только мысли о том чтобы:
1) Отсортировать ряд
2) Проверить первых 3 числа на разницу(найти шаг)
3) Пробежаться по ряду проверяя между числами шаг
Но чего-то это мне кажется очень легким, или я что-то не понимаю. Подскажите как можно еще реализовать это задание
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.02.2011, 21:39     Арифметическая прогрессия
Посмотрите здесь:

Проверить, можно ли переставить элементы массива так, чтобы получилась арифметическая прогрессия C++
Арифметическая прогрессия C++
C++ Арифметическая прогрессия
Арифметическая прогрессия C++
C++ Арифметическая прогрессия в массиве
Арифметическая прогрессия C++
Одномерные массивы. Найти есть ли в нем арифметическая прогрессия состоящая из трех элементов C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
@KOT@
81 / 39 / 2
Регистрация: 29.01.2010
Сообщений: 386
11.02.2011, 21:47     Арифметическая прогрессия #2
Ваша последовательность действий верна, я думаю! Попробуйте реализовать и протестировать программу, действительно - ничего сложного нет!
MegaAce
330 / 304 / 65
Регистрация: 14.02.2010
Сообщений: 662
11.02.2011, 21:47     Арифметическая прогрессия #3
Цитата Сообщение от Vivo Посмотреть сообщение
Но чего-то это мне кажется очень легким, или я что-то не понимаю
Все гениально- просто!
VenCarbon
32 / 31 / 3
Регистрация: 14.12.2010
Сообщений: 158
11.02.2011, 21:48     Арифметическая прогрессия #4
Если верить Вики, то ваш алгоритм будет работать. Только я бы нашла разницу между первыми двумя после сортировки... Зачем делать лишние действия?)
@KOT@
81 / 39 / 2
Регистрация: 29.01.2010
Сообщений: 386
11.02.2011, 21:49     Арифметическая прогрессия #5
Цитата Сообщение от MegaAce Посмотреть сообщение
Все гениально- просто!
верно
Vivo
23 / 23 / 2
Регистрация: 27.09.2009
Сообщений: 101
12.02.2011, 20:10  [ТС]     Арифметическая прогрессия #6
Спасибо всем за помощь
Novij
3 / 3 / 0
Регистрация: 12.12.2010
Сообщений: 99
12.02.2011, 23:14     Арифметическая прогрессия #7
Вот приблизительно так.
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
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
// xyeta.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <locale>
#include <iostream>
#include "windows.h"
#include <cmath>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
    //Ввод количества чисел.
    int n;
    cout<<"n=";
    cin>>n;
    cout<<endl;
 
    //ввод чисел с клавиатуры
    int *chisla=new int[n];
    for(int i=0;i<n;i++)
        {
       cin>>chisla[i];
        }
    
    //Массив куда будем заносить числа начиная с наименьшего в возрастающем порядке.
    int *mas=new int[n];
 
 
    //Распологаем в порядке возрастания. (До конца в механихме сортировки не уверен)
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            if(chisla[i]<chisla[j])
            {
                mas[i]=chisla[i];
            }
 
        }
    }
 
    //Ищем шаг
    int d=mas[1]-mas[0];
    setlocale(LC_ALL, "Russian");
    wcout << L"Шаг равен ="<<d<<endl;
 
    //Сравниваем являются ариф. прогресс.
    for(int i=0;i<n;i++)
    {
        if(d==mas[i+1]-mas[i])
        {
            setlocale(LC_ALL, "Russian");
            wcout << L"Из данных чисел можно составить арифметическую прогрессию"<<endl;
        }
        else
        {
            setlocale(LC_ALL, "Russian");
            wcout << L"Из данных чисел нельзя составить арифметическую прогрессию"<<endl;
        }
    }
 
 
    system("PAUSE");
    return 0;
}
Добавлено через 13 минут
Более исправленный вид.
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
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
// xyeta.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <locale>
#include <iostream>
#include "windows.h"
#include <cmath>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
    //Ввод количества чисел.
    int n;
    cout<<"n=";
    cin>>n;
    cout<<endl;
 
    //ввод чисел с клавиатуры
    int *chisla=new int[n];
    for(int i=0;i<n;i++)
        {
       cin>>chisla[i];
        }
    
    //Массив куда будем заносить числа начиная с наименьшего в возрастающем порядке.
    int *mas=new int[n];
 
 
    //Распологаем в порядке возрастания. (До конца в механихме сортировки не уверен)
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            if(chisla[i]<chisla[j])
            {
                mas[i]=chisla[i];
            }
 
        }
    }
 
    //Ищем шаг
    int d=mas[1]-mas[0];
    setlocale(LC_ALL, "Russian");
    wcout << L"Шаг равен ="<<d<<endl;
 
    //Сравниваем являются ариф. прогресс.
 
    int *prov=new int[n];
 
    for(int i=0;i<n;i++)
    {
        if(d==mas[i+1]-mas[i])
        {
            {
            prov[i]=1;
            int z=0;
            z+=prov[i];
            if(z==n)
            {
            setlocale(LC_ALL, "Russian");
            wcout << L"Из данных чисел можно составить арифметическую прогрессию"<<endl;
            }
            else
            {
            setlocale(LC_ALL, "Russian");
            wcout << L"Из данных чисел нельзя составить арифметическую прогрессию"<<endl;
            }
            }
        }
    }
 
 
    system("PAUSE");
    return 0;
}
Код еще сырой.
Завтра посмотрю еще.
Mr.X
Эксперт С++
3039 / 1684 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
13.02.2011, 00:00     Арифметическая прогрессия #8
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
/////////////////////////////////////////////////////////////////////////////////////////
//Пользователь задает n кол-во целых чисел, необходимо определить можно ли расположить 
//эти числа в ряд так, чтобы ряд был арифметической прогрессией.
/////////////////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <iostream>
#include <numeric>
#include <set>
#include <vector>
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::set<int>       T_num_set;
typedef std::multiset<int>  T_num_multiset;
typedef std::vector<int>    T_nums;
/////////////////////////////////////////////////////////////////////////////////////////
bool  it_is_possible_to_make_arith_progr_from(const T_num_multiset&  nums_multiset)
{
    T_nums  nums_adj_diff;
    std::adjacent_difference(nums_multiset.begin(), nums_multiset.end(), 
                             std::back_inserter(nums_adj_diff));
 
    T_num_set  adj_diff_set(nums_adj_diff.begin() + 1, nums_adj_diff.end());
    return  adj_diff_set.size() == 1;
}
/////////////////////////////////////////////////////////////////////////////////////////
int main()
{
    std::locale::global(std::locale(""));    
    T_num_multiset  nums_multiset;
    std::cout << "Введите через пробел последовательность целых чисел:"
              << std::endl;
 
    std::copy
        (
            std::istream_iterator<int>(std::cin), 
            std::istream_iterator<int>(), 
            std::inserter(nums_multiset, nums_multiset.begin())
        );
 
    std::cout << "Из этих чисел "
              << (it_is_possible_to_make_arith_progr_from(nums_multiset) 
                      ? "возможно" 
                      : "невозможно")
              << " составить арифметическую прогрессию."
              << std::endl;       
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.02.2011, 19:39     Арифметическая прогрессия
Еще ссылки по теме:

Арифметическая задача C++
Прогрессия Арифметическая C++
Арифметическая прогрессия C++
C++ Арифметическая прогрессия
C++ Арифметическая прогрессия

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

Или воспользуйтесь поиском по форуму:
Novij
3 / 3 / 0
Регистрация: 12.12.2010
Сообщений: 99
13.02.2011, 19:39     Арифметическая прогрессия #9
Блин шо то я теперь не соображу , написал дополнение что бы высвечивались не стоко надписей скоко n, а одна можно или нельзя составить тепрь шаг показывает неправильно
Yandex
Объявления
13.02.2011, 19:39     Арифметическая прогрессия
Ответ Создать тему
Опции темы

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