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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.92
Arshavin
0 / 0 / 0
Регистрация: 19.06.2010
Сообщений: 26
#1

Числа-близнецы - C++

01.07.2010, 17:09. Просмотров 3058. Ответов 8
Метки нет (Все метки)

1)Дано натуральное число n. Выяснить, имеются ли среди чисел n, n+1, ..., 2n близнецы, т.е. простые числа , разность между которыми равна двум. (Определить процедуру, позволяющую распознавать простые числа).
2)Дана действительная квадратная матрица порядка n. Найти наибольшее из значений элементов, расположенных в заштрихованной части матрицы (рис Е)

Числа-близнецы





Помогиет бедному студенту !Только начал Си изучать а задачи уже сдавать надо)
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.07.2010, 17:09
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Числа-близнецы (C++):

Найти числа-близнецы: простые числа разность между которыми равна 2 - C++
Дано натуральное число n. Среди чисел n, n + 1, …, 2n найти все числа-близнецы: простые числа, разность между которыми равна 2.

Числа - близнецы - C++
В массиве простых чисел определить наличие чисел-близнецов (11-13; 7-5; 3-5)

числа-близнецы - C++
#include<stdio.h> #include<stdlib.h> #include<math.h> #include<conio.h> int main() { int i=0,k=0,n,q=0; printf("vvedite...

Простые числа близнецы - C++
Здравствуйте Есть программа, которая вычисляет простое число из диапазона (0<n1<n2) #include <stdio.h> int main (void) { int...

Простые числа-близнецы - C++
Дан отрезок целых чисел от 2 до n. Найти все простые числа-близнецы(отличаются друг от друга на 2) Мой код тупой,недоделанный и тд.Но...

Найдите все числа близнецы на интервале от а до b - C++
Найдите все числа близнецы на интервале от а до b. Близнецы - два нечетных простых числа, разнящихся на две единицы, например: 5 и 7, 11 и...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Mr.X
Эксперт С++
3049 / 1694 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
02.07.2010, 17:11 #2
Задача 1:
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
////////////////////////////////////////////////////////////////////////////////
//Дано натуральное число n. Выяснить, имеются ли среди чисел n, n+1, ..., 2n 
//близнецы, т.е. простые числа , разность между которыми равна двум. 
//(Определить процедуру, позволяющую распознавать простые числа).
////////////////////////////////////////////////////////////////////////////////
#include <iostream>
#include <algorithm>
#include <vector>
#include <set>
#include <cmath>
 
typedef std::vector<long>  T_nums;
 
const long MIN_PROSTOE          = 2;
const long RAZNOST_MEJDU_BLIZN  = MIN_PROSTOE;
////////////////////////////////////////////////////////////////////////////////
long  get_first_bliznec
    (
        long  left,
        long  right
    )
{
    struct T_generate_s_pereryvom
    {
        long  cur_num_;
        long  baza_right_;
        long  blizn_left_;
        T_generate_s_pereryvom
            (
                long  start_num,
                long  baza_right,
                long  blizn_left
            ) : cur_num_    (start_num), 
                baza_right_ (baza_right), 
                blizn_left_ (blizn_left)
        {}
        long operator()()
        {
            if(cur_num_ == baza_right_ + 1)
            {
                cur_num_ = blizn_left_;
            }
            return  cur_num_++;
        }
    };
 
    const long RIGHT_BAZA_ROUND = static_cast<long>(sqrt(static_cast<double>(right)));
 
    T_nums  nums(right - left + 1 + RIGHT_BAZA_ROUND - MIN_PROSTOE + 1);
    std::generate(nums.begin(), nums.end(), 
                  T_generate_s_pereryvom(MIN_PROSTOE, RIGHT_BAZA_ROUND, left));    
 
    class T_bliznec_exception : public std::exception
    {
        long  bliznec_;
    public:
        T_bliznec_exception(long  bliznec) : bliznec_(bliznec)
        {}
 
        long get_bliznec() const
        {
            return  bliznec_;
        }
    };
 
    struct T_get_bliznec_from
    {
        T_nums  prostye_;
        long    left_bound_;
        T_get_bliznec_from(long  left_bound) : left_bound_(left_bound)
        {}
        void operator() (long  cur_num)
        {
            struct T_delitsya
            {
                long  delimoe_;
                T_delitsya(long  delimoe) : delimoe_(delimoe)
                {}
                bool operator() (long delitel)
                {
                    return delimoe_ % delitel == 0;
                }
            };
            if(prostye_.empty())
            {
                prostye_.push_back(cur_num);
            }
            else
            {
                if(std::find_if(prostye_.begin(), prostye_.end(), T_delitsya(cur_num)) 
                   == prostye_.end())
                {
                    if(cur_num - prostye_.back() == RAZNOST_MEJDU_BLIZN
                       && left_bound_ <= prostye_.back())
                    {
                        throw T_bliznec_exception(prostye_.back());
                    }
                    prostye_.push_back(cur_num);
                }
            }
        }
    };
    long  bliznec = 0;
    try
    {
        std::for_each(nums.begin(), nums.end(), T_get_bliznec_from(left));        
    }
    catch(const T_bliznec_exception& e)
    {
        bliznec = e.get_bliznec();
    }   
    return bliznec;
}
////////////////////////////////////////////////////////////////////////////////
int main()
{
    std::locale::global(std::locale(""));
    long n;
    do
    {
        std::cout << "n = ";
        std::cin >> n;    
    }while(n < 1);
    long m = 2 * n;
    long bliznec = get_first_bliznec(n, m);
    std::cout << "На отрезке ["
              << n
              << ", "
              << m
              << "] ";
    if(bliznec)
    {
        std::cout << "имеются простые числа-близнецы. "
                  << std::endl
                  << "Первые из них: "
                  << bliznec
                  << ", "
                  << bliznec + RAZNOST_MEJDU_BLIZN
                  << "."
                  << std::endl;
    }
    else
    {
        std::cout << "нет простых чисел-близнецов."
                  << std::endl;
    }
    return 0;
}
1
Arshavin
0 / 0 / 0
Регистрация: 19.06.2010
Сообщений: 26
03.07.2010, 04:24  [ТС] #3
Mr.X, Можеш на СИ сделать а то СИ++ ёще не изучал даж
0
pannaruto
11 / 11 / 2
Регистрация: 12.05.2010
Сообщений: 29
03.07.2010, 23:00 #4
1)Дано натуральное число n. Выяснить, имеются ли среди чисел n, n+1, ..., 2n близнецы, т.е. простые числа , разность между которыми равна двум. (Определить процедуру, позволяющую распознавать простые числа).
Попробуй этот простой вариант. Ну думаю у Mr.X лучше.
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
#include <stdio.h>
#include <conio.h>
#include <math.h>
 
char isPrime( int n )
{
    int squareRoot;
    int i;
 
    if( n < 2 ) return 0;
 
    squareRoot = (int)(sqrt((float)n));
    for( i = 2; i <= squareRoot; i++ )
        if( n % i == 0 )
            return 0;
    return 1;
}
 
int main()
{
    int n, i;
 
    printf("Enter natural number : ");
    scanf("%d", &n );
 
    for( i = n; i <= 2 * n; i++ )
        if( isPrime(i) && isPrime( i + 2 ) )
            printf("%-4d and %4d\n", i, i + 2 );
 
    getch();
    return 0;
}
2
Arshavin
0 / 0 / 0
Регистрация: 19.06.2010
Сообщений: 26
04.07.2010, 06:03  [ТС] #5
pannaruto, Забыл добавить должны быть функции отдельно реализующие ввод(если есть ),расчёт и вывод либо специальные функции описанные в условии задачи !НЕдолжны использоваться глобальные параметры!
0
pannaruto
11 / 11 / 2
Регистрация: 12.05.2010
Сообщений: 29
04.07.2010, 09:20 #6
Я думаю важен алгоритм, не важен код. Если ты мой алгоритм понимаешь, напишите свою прог.
0
fasked
Эксперт С++
4936 / 2516 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
04.07.2010, 10:51 #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
#include <locale.h>
#include <stdlib.h>
#include <stdio.h>
 
int isprime(int p);
 
int main()
{
   int i = 0, num = 0;
 
   setlocale(LC_ALL, "russian");
 
   printf("Введите число: ");
   scanf ("%d", &num);
 
   for (i = 0; i < 2 * num; ++i)
      if (isprime(i) && isprime(i + 2))
         printf("Числа %d и %d являются близнецами\n", i, i + 2);
 
   system("pause");
}
 
int isprime(long p)
{
   int d;
 
   for (d = 2; d < p; ++d)
      if (p % d == 0)
         return 0;
 
   return 1;
}
Добавлено через 27 минут
2A
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
#include <locale.h>
#include <stdlib.h>
#include <stdio.h>
 
#define MAX_VAL 99 
 
void randomize_matrix (int ** lpmatrix, int nrow, int ncol);
void print_to_display (int ** lpmatrix, int nrow, int ncol);
 
int main()
{
   int i = 0, j = 0, nsize = 0, **lpmatrix = NULL;
   int max = 0;
 
   setlocale(LC_ALL, "russian");
 
   printf("Введите размер матрицы (Число N): ");
   scanf ("%d", &nsize);
 
   if((lpmatrix = (int **)malloc(nsize * sizeof(int *))) == NULL) {
      perror("Ошибка выделения памяти\n");
      abort();
   }
 
   for (i = 0; i < nsize; ++i)
   {
      if ((lpmatrix[i] = (int *)malloc(nsize * sizeof(int))) == NULL) {
         perror("Ошибка выделения памяти\n");
         abort();
      }
   }
 
   randomize_matrix(lpmatrix, nsize, nsize);
   print_to_display(lpmatrix, nsize, nsize);
 
   /* ПОИСК МАКСИМУМА */
   max = lpmatrix[0][0];
   for (i = 0; i < nsize; ++i)
      for (j = i; j < nsize; ++j)
         if(lpmatrix[i][j] > max)
            max = lpmatrix[i][j];
 
   printf("Максимальное значение в заданной области: %d\n", max);
 
   for (i = 0; i < nsize; ++i)
      free(lpmatrix[i]);
   free(lpmatrix);
 
   system("pause");
   return 0;
}
 
void randomize_matrix(int ** lpmatrix, int nrow, int ncol)
{
   int i = 0, j = 0;
 
   for (i = 0; i < nrow; ++i)
      for (j = 0; j < ncol; ++j)
         lpmatrix[i][j] = rand() % MAX_VAL;
}
 
void print_to_display(int ** lpmatrix, int nrow, int ncol)
{
   int i = 0, j = 0;
 
   for (i = 0; i < nrow; ++i) 
   {
      for (j = 0; j < ncol; ++j)
         printf("%-3d ", lpmatrix[i][j]);
 
      printf("\n");
   }
}
Задачи для других областей будут отличаться только условиями в цикле поиска.
Сейчас ухожу, как вернусь доделаю.

Добавлено через 47 минут
C
1
2
   for (i = 0; i < nsize; ++i)
      for (j = 0; j <= i; ++j)

C
1
2
   for (i = 0; i <= nsize / 2; ++i)
      for (j = i; j < nsize - i; ++j)

C
1
2
   for (i = nsize - 1; i >= nsize / 2; --i)
      for (j = nsize - i - 1; j <= i; ++j)

C
1
2
3
4
5
6
7
8
9
10
   for (i = 0; i <= nsize / 2; ++i)
   {
      for (j = i; j < nsize - i; ++j) 
      {
         if(lpmatrix[i][j] > max)
            max = lpmatrix[i][j];
         if(lpmatrix[nsize-i-1][nsize-j-1] > max)
            max = lpmatrix[nsize-i-1][nsize-j-1];
      }
   }

C
1
2
3
4
5
6
7
8
9
10
   for (i = 0; i <= nsize / 2; ++i)
   {
      for (j = i; j < nsize - i; ++j) 
      {
         if(lpmatrix[j][i] > max)
            max = lpmatrix[j][i];
         if(lpmatrix[nsize-j-1][nsize-i-1] > max)
            max = lpmatrix[nsize-j-1][nsize-i-1];
      }
   }

C
1
2
3
4
   for (i = 0; i <= nsize / 2; ++i)
      for (j = i; j < nsize - i; ++j) 
         if(lpmatrix[j][i] > max)
            max = lpmatrix[j][i];

C
1
2
3
4
   for (i = 0; i <= nsize / 2; ++i)
      for (j = i; j < nsize - i; ++j) 
         if(lpmatrix[nsize-j-1][nsize-i-1] > max)
            max = lpmatrix[nsize-j-1][nsize-i-1];

C
1
2
3
4
   for (i = 0; i < nsize; ++i)
      for (j = 0; j < nsize - i; ++j) 
         if(lpmatrix[i][j] > max)
            max = lpmatrix[i][j];

C
1
2
3
4
   for (i = 0; i < nsize; ++i)
      for (j = nsize - 1; j >= nsize - i - 1; --j) 
         if(lpmatrix[i][j] > max)
            max = lpmatrix[i][j];
0
pannaruto
11 / 11 / 2
Регистрация: 12.05.2010
Сообщений: 29
04.07.2010, 11:12 #8
Задачи для других областей будут отличаться только условиями в цикле поиска.
Ещё отличатся начальными значениями max
А, Б, В, Д, Е, Ж, И : Начальное зна- : lqmatrix[0][0]
Г : lqmatrix[nsize - 1][0]
......
0
fasked
Эксперт С++
4936 / 2516 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
04.07.2010, 14:46 #9
Цитата Сообщение от pannaruto Посмотреть сообщение
Ещё отличатся начальными значениями max
да-да, точно, но я думаю, тут уже сообразить несложно, главное обход выполнить
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.07.2010, 14:46
Привет! Вот еще темы с ответами:

исправить программу, чтобы выводила результаты в два столбца. (простые числа близнецы) - C++
кроме того нужно добавить еще одну 5, чтобы было 3 5 и 5 7 #pragma hdrstop #include &lt;stdio.h&gt; #include &lt;iostream.h&gt; #include...

Выяснить, имеются ли среди чисел n, n+1, ..., 2n близнецы, т.е. простые числа, разность между которыми равна двум. - C++
Помогите, пожалуйста, решить задачу: дано натуральное число n. Выяснить, имеются ли среди чисел n, n+1, ..., 2n близнецы, т.е. простые...

Определить, есть ли среди чисел в заданном интервале близнецы (простые числа, разница между которыми = 2) - C++
Дано натуральное число n. Определить, есть ли среди чисел n, n+1, ..., 2n числа - близнецы, то есть простые числа, разница между которыми...

близнецы - C++
:curtsy: Привет всем. Пожалуйста мне нужна помощь. Заранее огромнейшее спасибо. Вот задачи: 1. Найти все натуральные числа, не...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
04.07.2010, 14:46
Ответ Создать тему
Опции темы

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