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

Выставить цифры в числе 1234567890 таким образом, чтобы новое число делилось без остатка на все числа от 2 до 18 включительно. - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 27, средняя оценка - 4.85
Parilo
14 / 2 / 0
Регистрация: 18.11.2011
Сообщений: 90
14.11.2012, 21:10     Выставить цифры в числе 1234567890 таким образом, чтобы новое число делилось без остатка на все числа от 2 до 18 включительно. #1
Дана задача.
Выставить цифры в числе 1234567890 таким образом, чтобы новое число делилось без остатка на все числа от 2 до 18 включительно.

Я написал нижеследующее, но программа выводит почему то такие числа как 12252240, 24504480 и т.д.
Что я тут неправильно написал?

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

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
#include <iostream>
using namespace std;
 
int main ()
{ int k=0;
   int a[9];
   int r=0;
  unsigned long int n=1000000000;
  bool flag=true;
  
  for (unsigned long int i=1234567890; i<=9876543210; i++)
 {  while (n>0)
  {
      a[r]=i/n; r++;
            
    i=i-(i/n*n); n=n/10;
    
  }
    
     for (int x=0; x<9; x++)
     { for (int y=x+1; y<10; y++)
         if (a[x]==a[y]) {flag=false; break;}
     }
      
 
     for (int j=2; j<=18; j++)
     {  if (i%j==0) k++; }  
 
 
     if (k==17 && flag==true) cout << i << " ";
     k=0; 
     
 }
 
return 0;
 }
Добавлено через 2 часа 6 минут
неужели никто не знает?


Кто-нибудь поможет сегодня?

Добавлено через 24 минуты
Попробовал изменить таким образом, но всё равно не работает

//////////////////////////////////////////////

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
#include <iostream>
using namespace std;
 
int main ()
{ int k=0;
   int a[9];
   int r=0;
  unsigned long int n=1000000000;
  bool flag=true;
  bool flag2=true;
  
  for (unsigned long int i=1234567890; i<=9876543210; i++)
  {   for (int j=2; j<=18; j++)
  {  if (i%j==0) k++; }  
      if (k!=17) flag2=false; k=0;
      
      while (n>0)
  {
      a[r]=i/n; r++;
            
    i=i-(i/n*n); n=n/10;
    
  }
    
     for (int x=0; x<9; x++)
     { for (int y=x+1; y<10; y++)
         if (a[x]==a[y]) {flag=false; break;}
     }
      
 
     if (flag2==true && flag==true) cout << i << " ";
     
     
 }
 
return 0;
 }
Добавлено через 25 минут
Я подумал, что в самом низу где я вывожу i, i уже потерял своё значение, поэтому добавил дополнительную переменную m и присвоил ему значение i. Но программа всё равно не работает.

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
#include <iostream>
using namespace std;
 
int main ()
{ int k=0;
   int a[9];
   int r=0;
  unsigned long int m;
  unsigned long int n=1000000000;
  bool flag=true;
  bool flag2=true;
  
  for (unsigned long int i=1234567890; i<=9876543210; i++)
  {   for (int j=2; j<=18; j++)
  {  if (i%j==0) k++; }  
  if (k!=17) {flag2=false;} k=0;
   m=i;
      
      while (n>0)
  {
      a[r]=i/n; r++;
            
    i=i-(i/n*n); n=n/10;
    
  }
    
     for (int x=0; x<9; x++)
     { for (int y=x+1; y<10; y++)
         if (a[x]==a[y]) {flag=false; break;}
     }
      
 
     if (flag2==true && flag==true) cout << m << " ";
     
     
 }
 
return 0;
 }
Добавлено через 11 минут
Обалдеть. Неужели никто не знает?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.11.2012, 21:10     Выставить цифры в числе 1234567890 таким образом, чтобы новое число делилось без остатка на все числа от 2 до 18 включительно.
Посмотрите здесь:

Преобразовать строку таким образом, чтобы цифры каждого слова были перенесены в начало слова без изменения порядка следования их в слове C++
Перестановка цифр в числе таким образом, чтобы получить наименьшее число записанное этими же цифрами C++
В данном натуральном числе переставить цифры таким образом, чтобы образовалось наименьшее число, записанное этими цифрами C++
C++ В данном натуральном числе переставить цифры таким образом, чтобы получилось наименьшее число записанное этими же цифрами
В данном натуральном числе переставить цифры таким образом, чтобы образовалось наименьшее число C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Parilo
14 / 2 / 0
Регистрация: 18.11.2011
Сообщений: 90
15.11.2012, 18:37  [ТС]     Выставить цифры в числе 1234567890 таким образом, чтобы новое число делилось без остатка на все числа от 2 до 18 включительно. #21
Цитата Сообщение от I.M. Посмотреть сообщение
Я про код Kuzia domovenok. Его код рабочий.
А ваш код, Parilo, не верен.

Возьмите любое из четырех чисел:
2438195760
3785942160
4753869120
4876391520
и прогоните его через вашу проверку.
А в моём коде где и в чём ошибка? Подскажите если не трудно? Заранее спасибо.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
15.11.2012, 18:40     Выставить цифры в числе 1234567890 таким образом, чтобы новое число делилось без остатка на все числа от 2 до 18 включительно. #22
Вообще, скажите, есть тема, где разбирается подобная проблема? Или никто не сталкивался?
Parilo
14 / 2 / 0
Регистрация: 18.11.2011
Сообщений: 90
15.11.2012, 19:00  [ТС]     Выставить цифры в числе 1234567890 таким образом, чтобы новое число делилось без остатка на все числа от 2 до 18 включительно. #23
Цитата Сообщение от Parilo Посмотреть сообщение
А в моём коде где и в чём ошибка? Подскажите если не трудно? Заранее спасибо.
Ну так в чём ошибка если код мой неверен?
Parilo
14 / 2 / 0
Регистрация: 18.11.2011
Сообщений: 90
18.11.2012, 18:36  [ТС]     Выставить цифры в числе 1234567890 таким образом, чтобы новое число делилось без остатка на все числа от 2 до 18 включительно. #24
Один из форумчанов сказал мне что мне нужно прокоментировать каждую строку, если хочу чтобы мне помогли.
Вот выкладываю свой код с комментариями. Помогите пожалуйста почему он не работает.

Задание напомню- Выставить цифры в числе 1234567890 таким образом чтобы новое число делилось без остатка на все числа от 2 до 18.

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
#include <iostream>
using namespace std;
 
int main ()
{ int k=0;
  
   int a[10];
   int r=0;
  unsigned long int m;
  unsigned long int n=1000000000;
    bool flag=true;
 
  
  for (unsigned long int i=1234567890; i<=9876543210; i++) // запускаем цикл проверки от 1234567890 до 9876543210.
  {  m=i; // присваиваем значение i переменной m, чтобы работать в цикле while ниже
 
      for (int j=2; j<=18; j++) // запускаем второй цикл for для проверки делится ли i на все числа от 2 до 18.
  {  if (i%j==0) k++; } // если делится k увеличиваем на +1.
      
   
        while (n>0) // запускаем цикл while чтобы
  {
      a[r]=m/n; r++;// определить каждую отдельную цифру числа m которой мы присвоили значение i в начале.
            
    m=m%n; n=n/10; // при этом уменьшаем n на 1/10 и m меняем каждый раз присваивая элементу массива a[r] каждую цифру числа i начиная с первого числа.
    
  }  
       for (int x=0; x<9; x++) // здесь мы запускаем 2 цикла for для проверки
     { for (int y=x+1; y<10; y++) // чтобы ни один из 10 элементом массива a[], то есть цифры числа не совпадали друг с другом.
     if (a[x]==a[y]) {flag=false; break;} // если же будет хоть одно совпадение, то flag присвоить false.
       }  
 
        
 
     if (k==17 && flag==true) cout << i << " "; // здесь мы выводим если переменная K равен 17, то есть делится без остатка 17 раз от 2 до 18 и flag равно true, то есть если все цифры в числе разные вывести i. 
     k=0; // присваиваем переменной k начальное значение 0, так как выше мы её успели изменить.
     n =1000000000;// присваиваем переменной n начальное значение 1000000000, так как выше мы её успели изменить.
     continue; // продолжаем цикл, так как выше мы поставили break
     
     
 }
 
return 0;
 }
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
18.11.2012, 20:01     Выставить цифры в числе 1234567890 таким образом, чтобы новое число делилось без остатка на все числа от 2 до 18 включительно. #25
да хватит уже с этим кодом возиться
ошибка в 23й строчке. r изменяется от 0 до 403 подумай почему.
Но даже когда ты исправишь ошибку, подумай над своим подходом.
Ты 1) перебираешь ~9 миллиардов чисел, хотя народ решил тебе перебрав лишь порядка 3,5 миллионов перестановок.
2) проверяешь в цикле деление на каждый из 17ти делителей, хотя проверять надо лишь один раз деление на их НОК
короче, тебе предложили более оптимальное решение, чем в лоб.
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
18.11.2012, 20:35     Выставить цифры в числе 1234567890 таким образом, чтобы новое число делилось без остатка на все числа от 2 до 18 включительно. #26
Parilo, а где переменной flag возвращается начальное значение?
Parilo
14 / 2 / 0
Регистрация: 18.11.2011
Сообщений: 90
19.11.2012, 19:34  [ТС]     Выставить цифры в числе 1234567890 таким образом, чтобы новое число делилось без остатка на все числа от 2 до 18 включительно. #27
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
да хватит уже с этим кодом возиться
ошибка в 23й строчке. r изменяется от 0 до 403 подумай почему.
Но даже когда ты исправишь ошибку, подумай над своим подходом.
Ты 1) перебираешь ~9 миллиардов чисел, хотя народ решил тебе перебрав лишь порядка 3,5 миллионов перестановок.
2) проверяешь в цикле деление на каждый из 17ти делителей, хотя проверять надо лишь один раз деление на их НОК
короче, тебе предложили более оптимальное решение, чем в лоб.
Кузя, не могли бы Вы уточнить почему в 23 строчке r изменяется от 0 до 403? Никак не могу понять, почему?
Я только только учусь и только понимая свои ошибки смогу чему то научиться. Объясните пожалуйста если можете.
Спасибо заранее

Добавлено через 4 минуты
Цитата Сообщение от I.M. Посмотреть сообщение
Parilo, а где переменной flag возвращается начальное значение?
Спасибо, I_M я присвоил начальное значение true переменной flag в конце, но он всё равно не работает. Где то у меня ещё ошибка. Пожалуйста не судите строго что я пишу сложный и тупой код, я только только учусь и пока только разбираюсь на простейших ошибках. Если знаете что именно в моём коде нужно изменить чтобы заработал, подскажите. Только пожалуйста не пишите свой код с применением классов и функций, я знаю что есть много более коротких и правильных путей решить эту задачу, но я хочу понять в своём коде где я ошибаюсь, и для этого я его прокомментировал полностью.
Заранее благодарю.
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
20.11.2012, 13:32     Выставить цифры в числе 1234567890 таким образом, чтобы новое число делилось без остатка на все числа от 2 до 18 включительно. #28
Цитата Сообщение от Parilo Посмотреть сообщение
Кузя, не могли бы Вы уточнить почему в 23 строчке r изменяется от 0 до 403? Никак не могу понять, почему?
потому что r перед проверкой очередного числа надо обнулять, а то оно равно нулю только в самом начале программы. Тебе ж надо его обнулять в цикле по i перед каждым вхождением в цикл while, т.е. на строчке 20 надо писать r=0;

Добавлено через 23 минуты
а то сейчас заполняются элементы массива a[0]...a[9] только в первой итерации цикла по i
во второй программа пытается уже заполнить значениями a[10]...a[19], которых не существует

Добавлено через 53 секунды
но сам принцип поиска чисел с неповторяющимися цифрами просто ОООЧЕНЬ нерационален
Parilo
14 / 2 / 0
Регистрация: 18.11.2011
Сообщений: 90
20.11.2012, 18:21  [ТС]     Выставить цифры в числе 1234567890 таким образом, чтобы новое число делилось без остатка на все числа от 2 до 18 включительно. #29
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
потому что r перед проверкой очередного числа надо обнулять, а то оно равно нулю только в самом начале программы. Тебе ж надо его обнулять в цикле по i перед каждым вхождением в цикл while, т.е. на строчке 20 надо писать r=0;

Добавлено через 23 минуты
а то сейчас заполняются элементы массива a[0]...a[9] только в первой итерации цикла по i
во второй программа пытается уже заполнить значениями a[10]...a[19], которых не существует

Добавлено через 53 секунды
но сам принцип поиска чисел с неповторяющимися цифрами просто ОООЧЕНЬ нерационален
Кузя спасибо большое за подсказку, я в конце присвоил r начальное значение, но программа всё равно не работает.
Больше нигде ошибок нет? Если нет ошибок то программа должна работать, но она не работает. Никак не пойму.
Где ещё может быть ошибка?
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
20.11.2012, 19:21     Выставить цифры в числе 1234567890 таким образом, чтобы новое число делилось без остатка на все числа от 2 до 18 включительно. #30
в чём выражается "не работает"? Или выводит неправильно? Или не компилируется из-за ошибок?Вылетает с похожим на предыдущее окошком? Или просто моргает курсором в консоли и ничего не выводит?

Если последнее, то скорее всего просто ооочень долго считает из-за (как я уже сказал) нерационального алгоритма.
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
20.11.2012, 19:52     Выставить цифры в числе 1234567890 таким образом, чтобы новое число делилось без остатка на все числа от 2 до 18 включительно. #31
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
У меня DevCPP тоже глючит. Это исключительно проблемы DevCPP
Дело в том, что переменная divisor и один из элементов массива расположены оказались по одному адресу в памяти.(я вроде не выхожу нигде за границы массива)
Костыль-решение: поменять местами строки
C++
1
2
unsigned long long divisor;
unsigned long long half_life;
На
C++
1
2
[CPP]unsigned long long half_life;
unsigned long long divisor;
[/CPP]
DevCPP это IDE. Из-за IDE такой проблемы не может быть.

Первая попавшая в голову реализация:

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
#include <iostream>
 
 
bool uniqDig( unsigned long long int number ) {
   bool digits[ 10 ] = { false };
   
   unsigned long long int tmp;
   
   while ( number ) {
      tmp = number % 10ULL;
      
      if ( digits[ tmp ])
         return false;
         
      digits[ tmp ] = true;
      
      number /= 10ULL;
   }
   
   return true;
}
 
int main() {
   unsigned long long int divider = 5ULL * 7 * 9 * 11 * 13 * 16 * 17;
   unsigned long long int num = divider;
 
   while ( num < 123456789ULL )
      num += divider;
 
   while ( num < 9876543211ULL ) {
      if ( uniqDig( num ))
         std::cout << num << std::endl;
         
      num += divider;
   }
   
   return 0;
}
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
20.11.2012, 23:20     Выставить цифры в числе 1234567890 таким образом, чтобы новое число делилось без остатка на все числа от 2 до 18 включительно. #32
Цитата Сообщение от Toshkarik Посмотреть сообщение
DevCPP это IDE. Из-за IDE такой проблемы не может быть.
Что, за дурака что ли держишь? Я собственными руками делал и глазами видел, что адреса двух глобальных переменных оказались равны. MSVS себе такого не позволяет!
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
21.11.2012, 06:13     Выставить цифры в числе 1234567890 таким образом, чтобы новое число делилось без остатка на все числа от 2 до 18 включительно. #33
Kuzia domovenok, Вы о чем вообще? Что MSVS, что DevCPP - IDE. Они не компилируют файлы. В поставке с DevCPP идет GCC, в MSVS - microsoft compiler. А IDE всего лишь позволяет удобно редактировать текст исходных файлов. С DevCPP, скорей всего, идет старая версия GCC. Но, похоже, у Вас одного "две переменные расположены по одному адресу".

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
(я вроде не выхожу нигде за границы массива)
А теперь вместо глобального массива int mask[ 10 ]; Попробуйте использовать std::vector mask( 10, 0 );. И каждое обращение замените с mask[ index ] на mask.at( index ). Вы получите исключение out of range, что подтверждает факт выхода за пределы. И расположен он вот в этом кусочке:
C++
1
for (argc^=argc; argc<10; mask[argc]=argc)argc++;
Parilo
14 / 2 / 0
Регистрация: 18.11.2011
Сообщений: 90
21.11.2012, 06:36  [ТС]     Выставить цифры в числе 1234567890 таким образом, чтобы новое число делилось без остатка на все числа от 2 до 18 включительно. #34
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
в чём выражается "не работает"? Или выводит неправильно? Или не компилируется из-за ошибок?Вылетает с похожим на предыдущее окошком? Или просто моргает курсором в консоли и ничего не выводит?

Если последнее, то скорее всего просто ооочень долго считает из-за (как я уже сказал) нерационального алгоритма.
Кузя, просто моргает курсором и ничего не выводит. Не может же он так долго считать? Я его 2 часа открытым держал. Я думаю этого времени достаточно чтобы просчитать. А он просто моргает.
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
21.11.2012, 07:04     Выставить цифры в числе 1234567890 таким образом, чтобы новое число делилось без остатка на все числа от 2 до 18 включительно. #35
Kuzia domovenok, вдруг если сами не поймете - выражение mask[argc]=argc в этом цикле вычисляется после выполнения тела цикла. Поэтому, когда argc становится 10, сначала вычисляется выражение mask[argc]=argc, а потом уже идет проверка условия продолжения цикла. Вообще изменения счетчиков в теле цикла - не очень хорошая идея.

Parilo, У Вас ошибка в том, что вы используете тип unsigned long, в который числа больше 4 млрд. на помещаются. Используйте unsigned long long. И к большим константам, вроде 9876543210 приписывайте в конце суффикс ull, так как по умолчанию, все целочисленные константы имеют тип int.
Parilo
14 / 2 / 0
Регистрация: 18.11.2011
Сообщений: 90
21.11.2012, 09:46  [ТС]     Выставить цифры в числе 1234567890 таким образом, чтобы новое число делилось без остатка на все числа от 2 до 18 включительно. #36
Цитата Сообщение от Toshkarik Посмотреть сообщение
Kuzia domovenok, вдруг если сами не поймете - выражение mask[argc]=argc в этом цикле вычисляется после выполнения тела цикла. Поэтому, когда argc становится 10, сначала вычисляется выражение mask[argc]=argc, а потом уже идет проверка условия продолжения цикла. Вообще изменения счетчиков в теле цикла - не очень хорошая идея.

Parilo, У Вас ошибка в том, что вы используете тип unsigned long, в который числа больше 4 млрд. на помещаются. Используйте unsigned long long. И к большим константам, вроде 9876543210 приписывайте в конце суффикс ull, так как по умолчанию, все целочисленные константы имеют тип int.
Я использую компилятор Visual c++ 6.0 Почему то он у меня не понимает тип unsigned long long. Может попорбовать unsigned long long int? Этот тоже помоему не поймёт, дома вечером проверю. и Ещё ull надо без пробела приписывать слитно с числом?
Можно показать как он приписывается в моём коде если можно?
Спасибо.
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
21.11.2012, 09:52     Выставить цифры в числе 1234567890 таким образом, чтобы новое число делилось без остатка на все числа от 2 до 18 включительно. #37
Цитата Сообщение от Parilo Посмотреть сообщение
ull надо без пробела приписывать слитно с числом?
Да, слитно. 9876543210ull.
Цитата Сообщение от Parilo Посмотреть сообщение
Я использую компилятор Visual c++ 6.0
Тогда Вам не решить данную задачу Вашим способом. Эта версия студии не поддерживает новый стандарт, в котором введен тип long long.

PS: я просмотрел полностью Ваш код. В нем очень много ошибок, все их перечислять не буду, вот некоторые:
Не сбрасываете значение flag при проверке нового числа.
Не обнуляете r при проверке нового числа, из-за чего выходите за пределы массива уже на втором числе.
Оператор break относится только к ближайшему циклу или оператору switch. Поэтому будет прерван только цикл for (int y=x+1; y<10; y++)
Оператор continue в конце ни к чему.

И так можно долго.
Parilo
14 / 2 / 0
Регистрация: 18.11.2011
Сообщений: 90
24.11.2012, 14:38  [ТС]     Выставить цифры в числе 1234567890 таким образом, чтобы новое число делилось без остатка на все числа от 2 до 18 включительно. #38
Цитата Сообщение от Toshkarik Посмотреть сообщение
Да, слитно. 9876543210ull.

Тогда Вам не решить данную задачу Вашим способом. Эта версия студии не поддерживает новый стандарт, в котором введен тип long long.

PS: я просмотрел полностью Ваш код. В нем очень много ошибок, все их перечислять не буду, вот некоторые:
Не сбрасываете значение flag при проверке нового числа.
Не обнуляете r при проверке нового числа, из-за чего выходите за пределы массива уже на втором числе.
Оператор break относится только к ближайшему циклу или оператору switch. Поэтому будет прерван только цикл for (int y=x+1; y<10; y++)
Оператор continue в конце ни к чему.

И так можно долго.
Тошкарик, спасибо за помощь! Я конечно понимаю, что я чайник в программировании и пока только учусь, ну вот насчёт "так можно долго.." я конечно не согласен))), кроме обнуления r и flag, там больше практически ошибок не было, что я уже сделал. Continue даже если и не нужен, по крайней мере не мешает)).
Ладно, спасибо большое в любом случае. Подскажите пожалуйста какой компилятор лучше всего использовать для таких программ?
Спасибо.
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
24.11.2012, 14:45     Выставить цифры в числе 1234567890 таким образом, чтобы новое число делилось без остатка на все числа от 2 до 18 включительно. #39
скачай msvs и не думай о компиляторах
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.11.2012, 19:46     Выставить цифры в числе 1234567890 таким образом, чтобы новое число делилось без остатка на все числа от 2 до 18 включительно.
Еще ссылки по теме:

C++ В числе *4**3 дописать три цифры так, чтобы полученное число делилось на 15
C++ Дано натуральное четырехзначное число. Определить все цифры в цифровой записи данного числа, на которые оно делится без остатка
Отредактировать текст таким образом, чтобы все знаки препинания располагались в начале, за ним следовали цифры C++

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

Или воспользуйтесь поиском по форуму:
Parilo
14 / 2 / 0
Регистрация: 18.11.2011
Сообщений: 90
26.11.2012, 19:46  [ТС]     Выставить цифры в числе 1234567890 таким образом, чтобы новое число делилось без остатка на все числа от 2 до 18 включительно. #40
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
скачай msvs и не думай о компиляторах
Я так думаю MSVS это Microsoft Visual Studio верно?
Я скачал с сайта Майкрософт Microsoft Visual C++ 2010 Express Edition. И также программа не работает, просто мигает курсором.

Код финальный после всех исправлений. Блин запарился с этим кодом. Что делать чтобы работал и ull Добавил и long long поставил. Что тут не так?

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
#include <StdAfx.h> 
#include <iostream>
using namespace std;
 
int main ()
{ int k=0;
  
   int a[10];
   int r=0;
  unsigned long long m;
  unsigned long long n=1000000000ull;
    bool flag=true;
 
  
  for (unsigned long long i=1234567890ull; i<=9876543210ull; i++) 
  {  m=i; 
 
      for (int j=2; j<=18; j++) 
  {  if (i%j==0) k++; } 
      
   
        while (n>0) 
  {
      a[r]=m/n; r++;
            
    m=m%n; n=n/10; 
    
  }  
       for (int x=0; x<9; x++) 
     { for (int y=1; y<10; y++) 
     if (a[x]==a[y]) {flag=false; break;} 
       }  
          continue; 
        
 
     if (k==17 && flag==true) cout << i << " "; 
     k=0; 
     n =1000000000ull;
     if (flag==false) flag=true;
     r=0;
      
     
     
 }
 
return 0;
 }
Yandex
Объявления
26.11.2012, 19:46     Выставить цифры в числе 1234567890 таким образом, чтобы новое число делилось без остатка на все числа от 2 до 18 включительно.
Ответ Создать тему
Опции темы

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