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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.63
temperus
1 / 1 / 0
Регистрация: 02.03.2011
Сообщений: 42
#1

Наименьшее общее кратное - C++

09.03.2011, 17:29. Просмотров 2497. Ответов 10
Метки нет (Все метки)

есть одномерный массив, содержащий целые числы. нужно найти наименьшее общее кратное, которое бы удовлетворяло всем эти числам. не знаю как реализовать на си. буду очень благодарен, если оставите комментарий в коде. заранее спасибо, если кто поможет.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.03.2011, 17:29     Наименьшее общее кратное
Посмотрите здесь:

Наименьшее общее кратное C++
Найти наименьшее общее кратное (НОК) натуральных чисел С++ C++
Найти наименьшее общее кратное трех чисел C++
Найти наименьшее общее кратное (НОК) n натуральных чисел C++
Введите 2 натуральные числа и найдите их наименьшее общее кратное. C++
C++ Определить наименьшее общее кратное двух натуральных чисел
C++ Наименьшее общее кратное трёх чисел
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MILAN
 Аватар для MILAN
883 / 777 / 86
Регистрация: 21.02.2009
Сообщений: 1,722
09.03.2011, 17:57     Наименьшее общее кратное #2
temperus,
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
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#define N 10
int main()
{
    srand(unsigned(time(NULL)));
    int mas[N];
    int flag,i,j,max;
    printf("Array -> ");
    for(i=0; i<N; i++)
     {
         mas[i]=rand()%10+1;
          printf("%d ", mas[i]);
     }
     max=mas[0];
      for(i=0; i<N; i++)
      {
          if(mas[i]>max)
          {
              max=mas[i];
          }
      }
     for(i=max;;i++)
     {
         flag=1;
         for(j=0; j<N; j++)
         {
             if(!(i%mas[j]))
             {
                 flag=1;
             }
             else
             {
                 flag=0;
                 break;
             }
         }
         if(flag)
         {
          printf("Result -> %d ",i);
           break;
         }
     }
     getch();
     return 0;
 
}
temperus
1 / 1 / 0
Регистрация: 02.03.2011
Сообщений: 42
10.03.2011, 00:33  [ТС]     Наименьшее общее кратное #3
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
#include <stdio.h>
#include <conio.h>
int main()
{
  int a[100][100], b[100], i,j,k,M,N,x,y,max,flag;
  printf("Vvedite N,M: ");
  scanf("%d %d", &N, &M);
  printf("Vvedite x,y: ");
  scanf("%d %d", &x, &y);
  for (i=1; i<=N; i++)
      for (j=1; j<=M; j++)
          { printf("a[%d][%d]= ",i,j);
            scanf("%d",&a[i][j]); }
  j=1; k=1;
  while (j<=y)
  { b[k]=a[x][j];
    j++; k++; }
  j=y+1; i=x-1; k++;
  while (j<=M && i>=1)
  { b[k]=a[i][j];
    i--; j++; k++; }
  j=y+1; i=x+1; k++;
  while (j<=M && i<=N)
  { b[k]=a[i][j];
    k++; i++; j++; }
    
  max=b[1];
  for(i=2; i<=k; i++)
     if(b[i]>max)
        max=b[i];  
  for(i=max; ; i++)
  {
     flag=1;
     for(j=1; j<=k; j++)
     {
        if(!(i%b[j]))
           flag=1;
        else
        {
          flag=0;
          break;
        }
     }
     if(flag)
     {
       printf("Result %d ",i);
       break;
     }
  }
  getch();        
  return 0;
}
почему выкидывает ошибку ? не могу понять
MILAN
 Аватар для MILAN
883 / 777 / 86
Регистрация: 21.02.2009
Сообщений: 1,722
10.03.2011, 00:44     Наименьшее общее кратное #4
temperus, какая ошыбка?
temperus
1 / 1 / 0
Регистрация: 02.03.2011
Сообщений: 42
10.03.2011, 01:03  [ТС]     Наименьшее общее кратное #5
Цитата Сообщение от MILAN Посмотреть сообщение
temperus, какая ошыбка?
"исключение unknown software exception (0xc00000094) в приложении по адресу 0x004015de

нажмите ок для завершения приложения"

проверил вывод максимума - там все верно и ошибок нет. ошибка в алгоритме для нахождения кратного. но я не вижу её.
MILAN
 Аватар для MILAN
883 / 777 / 86
Регистрация: 21.02.2009
Сообщений: 1,722
10.03.2011, 01:07     Наименьшее общее кратное #6
temperus, выложите задание, потому что не охота в вашем коде разбиратся.
temperus
1 / 1 / 0
Регистрация: 02.03.2011
Сообщений: 42
10.03.2011, 02:00  [ТС]     Наименьшее общее кратное #7
Цитата Сообщение от MILAN Посмотреть сообщение
temperus, выложите задание, потому что не охота в вашем коде разбиратся.
задание: есть матрица размером N на M. есть точка отсчета у фигуры, условно x,y(её координаты).
фигура движется как на рисунке. т.е. она идет по иксовой строке меняя столбцы до координаты y(столбца точки отсчета) и потом идет разветвление.
нужно найти наименьшее общее кратное для всех элементов из заданной области определения(аля для заштрихованных).
Миниатюры
Наименьшее общее кратное  
temperus
1 / 1 / 0
Регистрация: 02.03.2011
Сообщений: 42
10.03.2011, 16:20  [ТС]     Наименьшее общее кратное #8
разветвление идет пока не упрется в какую-либо границу (или в N или в M).
Shman
3 / 3 / 2
Регистрация: 30.04.2012
Сообщений: 212
25.05.2012, 08:56     Наименьшее общее кратное #9
MILAN, можешь объяснить что делает эта строк в твоем коде? Что проверяет?
C++
1
2
3
4
5
6
7
8
9
if(!(i%mas[j]))
 {
  flag=1;
 }
else
 {
  flag=0;
  break;
 }
Если что-то НЕ ВЫХОДИТ, то флаг = true, иначе flase и выйти из внутр. цикла?
Что конкретно делает операция "!(i%mas[j]"?
yleart
 Аватар для yleart
60 / 45 / 1
Регистрация: 07.10.2011
Сообщений: 139
25.05.2012, 09:19     Наименьшее общее кратное #10
Цитата Сообщение от Shman Посмотреть сообщение
MILAN, можешь объяснить что делает эта строк в твоем коде? Что проверяет?
C++
1
2
3
4
5
6
7
8
9
if(!(i%mas[j]))
 {
  flag=1;
 }
else
 {
  flag=0;
  break;
 }
Если что-то НЕ ВЫХОДИТ, то флаг = true, иначе flase и выйти из внутр. цикла?
Что конкретно делает операция "!(i%mas[j]"?
Если остаток от деления нулевой, то условие в if будет истинным, иначе ложным
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.05.2012, 09:44     Наименьшее общее кратное
Еще ссылки по теме:

Найти наименьшее общее кратное используя рекурсию C++
C++ Даны натуральные числа X и Y. Вычислить их наименьшее общее кратное.
C++ Найти наибольший общий делитель и наименьшее общее кратное
C++ Найти наименьшее общее кратное заданных N чисел
Наименьшее общее кратное C++

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

Или воспользуйтесь поиском по форуму:
Shman
3 / 3 / 2
Регистрация: 30.04.2012
Сообщений: 212
25.05.2012, 09:44     Наименьшее общее кратное #11
yleart, Так может лучше Flag объявить как bool, а не int? Мне кажется программу можно упростить до след. вида:
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
#include <stdio.h> 
#include <conio.h> 
#include <stdlib.h> 
#include <time.h> 
#define N 5 // Размер массива.
int main()
{
 int mas[N]; 
 int i, j, max;
 bool flag;
 srand(unsigned(time(NULL))); 
 printf("\n Massiv iz chisel ot 1 do 10: \n"); 
  for(i=0; i<N; i++)
  {
   mas[i]=rand()%10+1;
   printf("\n Mas[%d] = %d. ", i, mas[i]);
  }
 max=mas[0]; // Первый элемент массива назначаем максимальным.
  for(i=0; i<N; i++)
  {
   if(mas[i]>max) // Если какой-нибудь другой элемент массива больше максимального, то...
   { max=mas[i]; } // назначаем его максимальным.
  }
  
  for(i=max;;i++)
  { 
   for(j=0; j<N; j++)
   { if(!(i%mas[j])) // Если остаток от деления равен 0, то...
      { flag=1; } // условие = true.
     else
      { flag=0; // иначе = false.
        break; } // Прекратить внутренний цикл.
   } 
    if(flag==1) // Если условие = true.
    { printf("\n \n NOK = %d. \n",i); // Выводим результат.
      break; }  // Прекратить цикл.
  }
      
 getch(); 
 return 0; 
}
Yandex
Объявления
25.05.2012, 09:44     Наименьшее общее кратное
Ответ Создать тему
Опции темы

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