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

Задумано некоторое число - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.71
airesjke
0 / 0 / 0
Регистрация: 30.10.2011
Сообщений: 20
19.11.2011, 10:25     Задумано некоторое число #1
Задумано некоторое число x (x<100). Известны числа k, m, n - остатки от деления этого числа на 3, 5, 7. Найти x
 Комментарий модератора 
Запрещено создавать темы с бессмысленными названиями вроде "Помогите!", "Вопрос" и т.п.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.11.2011, 10:25     Задумано некоторое число
Посмотрите здесь:

Дано целое число. Вывести его строку-описание вида «отрицательное чет-ное число», «нулевое число», «положительное нечетное число» и т. д. C++
C++ Числовой ряд и некоторое число е.
C++ Некоторое число оканчивается на 2
Некоторое число оканчивается на 2. Если же эту его последнюю цифру переставить на первое место, то число удвоится. Найти это число C++
C++ Побитовые операции (программа, которая интерпретирует старшие 3 бита как некоторое число n...)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Байт
 Аватар для Байт
13988 / 8819 / 1230
Регистрация: 24.12.2010
Сообщений: 15,975
19.11.2011, 11:35     Задумано некоторое число #2
C
1
2
3
4
5
6
7
for(x=0; x<100; x++) {
  if ((x%3)==k && (x%5)==m && (x%7)==n) {
    cout<<x;
    break;
  }
}
if (x==100) cout<<"Решения нет";
По китайской теореме об остатках решение не более чем одно.
Вот если x < 105 - тогда ровно одно.
Hi4ko
74 / 74 / 4
Регистрация: 21.10.2010
Сообщений: 376
19.11.2011, 12:36     Задумано некоторое число #3
x<100 как бы намекает нам, что можно сделать это перебором
у нас есть 3 выражения:
http://www.cyberforum.ru/cgi-bin/latex.cgi? x=3*a+k
http://www.cyberforum.ru/cgi-bin/latex.cgi? x=5*b+m
http://www.cyberforum.ru/cgi-bin/latex.cgi? x=7*c+n
где a,b,c - натуральные числа или 0
http://www.cyberforum.ru/cgi-bin/latex.cgi? a_M=100/3=33
http://www.cyberforum.ru/cgi-bin/latex.cgi? b_M=100/5=20
http://www.cyberforum.ru/cgi-bin/latex.cgi? c_M=100/7=14
т.е в худшем случае будет http://www.cyberforum.ru/cgi-bin/latex.cgi? 33*20*14=9240 действий. Мало, значит можно решать перебором
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
using namespace std;
int main()
{
int k,m,n;
cin>>k>>m>>n;
for(int a=0;a!=34;a++)
for(int b=0;b!=21;b++)
for(int c=0;c!=15;c++)
if(3*a+k==5*b+m && 3*a+k==7*c+n && 5*b+m==7*c+n)
{
cout<<3*a+k<<endl;
break;
}
}
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
19.11.2011, 12:52     Задумано некоторое число #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Если знаете китайскую теорему об остатках (теория чисел), то решите задачу легко и поймете, что решение в диапазоне от 0 до 104 единственно, поэтому не зря вас просят найти x при условии, что x<100

Вот вам получаемая формула:

x = (70*k + 21*m + 15*n) % 105;

C
1
2
3
4
5
6
7
8
9
10
#include<stdio.h>
 
int main()
{
   int k, m, n, x;
   scanf("%d%d%d", &k, &m, &n);
   x = (70*k + 21*m + 15*n) % 105; 
   printf("x = %d\n", x);
   return 0;
}
Байт
 Аватар для Байт
13988 / 8819 / 1230
Регистрация: 24.12.2010
Сообщений: 15,975
19.11.2011, 16:59     Задумано некоторое число #5
Thinker, а первое слагаемое случаем не 35*k ?
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
19.11.2011, 18:15     Задумано некоторое число #6
Цитата Сообщение от Байт Посмотреть сообщение
Thinker, а первое слагаемое случаем не 35*k ?
Неа) Применил алгоритм решения системы сравнений, где модули попарно различны и попарно взаимно просты (китайская теорема об остатках). Это удивительно, что числа 21 и 15 остались, а не то, что 35 изменилось))
Байт
 Аватар для Байт
13988 / 8819 / 1230
Регистрация: 24.12.2010
Сообщений: 15,975
19.11.2011, 19:52     Задумано некоторое число #7
Цитата Сообщение от Thinker Посмотреть сообщение
Неа) Применил алгоритм решения системы сравнений, где модули попарно различны и попарно взаимно просты (китайская теорема об остатках). Это удивительно, что числа 21 и 15 остались, а не то, что 35 изменилось))
Тогда извиняйте. Это я из соображений симметрии. Подробно сам не смотрел, замучила текучка.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
19.11.2011, 20:28     Задумано некоторое число #8
Цитата Сообщение от Байт Посмотреть сообщение
замучила текучка

Не по теме:

не понял о чем вы. Гераклит тоже вот говорит:"Все течет, все меняется"

Shman
3 / 3 / 2
Регистрация: 30.04.2012
Сообщений: 212
19.05.2012, 14:26     Задумано некоторое число #9
Я загадал число 20, остатки от деления этого числа на 3, 5 и 7 - это 3, 0, 6, соответсвенно. Но когда я ввожу эти числа в качестве k, m, n, программа ничего не выдает, ни 20 ни "Число не найдено". Где ошибка?
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
#include <stdio.h>
#include <conio.h>
 
int main()
{
 int i, k, m, n; 
 
  printf ("Vvedite ostatok ot deleniya x na 3, k="); // Введите остаток от деления х на 3
  scanf ("%d", &k);
  printf ("Vvedite ostatok ot deleniya x na 5, m="); // Введите остаток от деления х на 5
  scanf ("%d", &m);
  printf ("Vvedite ostatok ot deleniya x na 7, n="); // Введите остаток от деления х на 7
  scanf ("%d", &n);
  
  for ( i=1; i <100; i++)
   {
    if ((i%3)==k && (i%5)==m && (i&7)==n)  // Если остаток от деления равен введеному числу, то...
     {  
      printf("\n x= %d", i); // напечатать его
      break;
     }
   if ((i%3)!=k && (i%5)!=m && (i&7)!=n) // Если остаток от деления НЕ равен введеному числу, то...
     {
      printf ("\n Chislo ne naydeno");   // напечатать "Число не найдено" 
      break;
     }   
   }  
 getch();
 return 0;
}
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
19.05.2012, 14:41     Задумано некоторое число #10
вот так пробуйте:
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
#include <stdio.h>
#include <conio.h>
 
int main()
{
 int i, k, m, n; 
 
  printf ("Vvedite ostatok ot deleniya x na 3, k="); // Введите остаток от деления х на 3
  scanf ("%d", &k);
  printf ("Vvedite ostatok ot deleniya x na 5, m="); // Введите остаток от деления х на 5
  scanf ("%d", &m);
  printf ("Vvedite ostatok ot deleniya x na 7, n="); // Введите остаток от деления х на 7
  scanf ("%d", &n);
  
  for ( i=1; i <100; i++)
   {
    if ((i%3)==k && (i%5)==m && (i%7)==n) 
     {  
      printf("\n x= %d", i);
      break;
     }
  }
   if ((i%3)!=k && (i%5)!=m && (i%7)!=n) 
     {
      printf ("\n Chislo ne naydeno");                    
     }   
   
 getch();
 return 0;
}
Цитата Сообщение от Shman Посмотреть сообщение
Я загадал число 20, остатки от деления этого числа на 3, 5 и 7 - это 3, 0, 6, соответсвенно.
И когда загадываете число 20, то вводите 2, 0, 6
Shman
3 / 3 / 2
Регистрация: 30.04.2012
Сообщений: 212
19.05.2012, 14:56     Задумано некоторое число #11
valeriikozlov,
Убрали break в последнем if? Ввожу 2, 0, 6. Пишет 99 раз, что число не найдено.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
19.05.2012, 15:06     Задумано некоторое число #12
Вы не свой код правьте, Вы мой скопируйте себе и запускайте (я не только break убрал, еще и скобки поменял).
Shman
3 / 3 / 2
Регистрация: 30.04.2012
Сообщений: 212
19.05.2012, 15:26     Задумано некоторое число #13
valeriikozlov, теперь понял, спасибо. А почему когда вводишь 1, 0, 2 ничего не выводится? Вообще ничего.
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
19.05.2012, 15:41     Задумано некоторое число #14
Потому, что решением является 100, а в цикле проверяется последним 99. А после цикла проверяется как-раз 100, и поскольку остатки подходят, то и про не найденное число не сообщается.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
19.05.2012, 15:45     Задумано некоторое число #15
Цитата Сообщение от Shman Посмотреть сообщение
А почему когда вводишь 1, 0, 2 ничего не выводится? Вообще ничего.
просто число 100, которому равна переменная i после цикла, удовлетворяет как раз условию: остаток от деления на 3 равен 1, остаток от деления на 5 равен 0, остаток от деления на 7 равен 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
24
25
26
27
28
29
30
#include <stdio.h>
#include <conio.h>
 
int main()
{
 int i, k, m, n; 
 
  printf ("Vvedite ostatok ot deleniya x na 3, k="); // Введите остаток от деления х на 3
  scanf ("%d", &k);
  printf ("Vvedite ostatok ot deleniya x na 5, m="); // Введите остаток от деления х на 5
  scanf ("%d", &m);
  printf ("Vvedite ostatok ot deleniya x na 7, n="); // Введите остаток от деления х на 7
  scanf ("%d", &n);
  
  for ( i=1; i <100; i++)
   {
    if ((i%3)==k && (i%5)==m && (i%7)==n) 
     {  
      printf("\n x= %d", i);
      break;
     }
  }
   if (i==100) 
     {
      printf ("\n Chislo ne naydeno");                    
     }   
   
 getch();
 return 0;
}
Shman
3 / 3 / 2
Регистрация: 30.04.2012
Сообщений: 212
19.05.2012, 15:59     Задумано некоторое число #16
valeriikozlov,
Тогда уж позволить вручную устанавливать мин и макс границу интервала и добавить if i>=max:
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
#include <stdio.h>
#include <conio.h>
 
int main()
{
 int i, min, max, k, m, n; 
  printf ("Vvedite min x intervala, min x="); // Введите минимальный x интервала
  scanf ("%d", &min); 
  printf ("Vvedite max x intervala, max x="); // Введите максимальный x интервала
  scanf ("%d", &max); 
  printf ("Vvedite ostatok ot deleniya x na 3, k="); // Введите остаток от деления х на 3
  scanf ("%d", &k);
  printf ("Vvedite ostatok ot deleniya x na 5, m="); // Введите остаток от деления х на 5
  scanf ("%d", &m);
  printf ("Vvedite ostatok ot deleniya x na 7, n="); // Введите остаток от деления х на 7
  scanf ("%d", &n);
  
  for ( i=min; i <max; i++)
   {         
    if ((i%3)==k && (i%5)==m && (i%7)==n)  // Если остаток от деления равен введеному числу, то...
     {  
      printf("\n x= %d", i); // напечатать его
      break;
     }
  }
   if ((i%3)!=k && (i%5)!=m && (i%7)!=n && i>=max)   // Если остаток от деления НЕ равен введеному числу, то..
     {
      printf ("\n Chislo ne naydeno");  // напечатать "Число не найдено" 
     }
        
 getch();
 return 0;
}
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
19.05.2012, 16:07     Задумано некоторое число #17
Shman, тогда если будет задумано число max, то программа опять ничего не выведет (при условии, что в цикле меньше 105 итераций)

Добавлено через 47 секунд
C++
1
if (i==max)
Shman
3 / 3 / 2
Регистрация: 30.04.2012
Сообщений: 212
19.05.2012, 16:31     Задумано некоторое число #18
grizlik78, тогда как ограничить ввод неправильных значений? чтобы при вводе 0>x>104 выводилось сообщение о недопустимости ввода?
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
19.05.2012, 16:33     Задумано некоторое число #19
А в этом месте не понял. Вводятся же остатки, а число загадывается.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.05.2012, 17:30     Задумано некоторое число
Еще ссылки по теме:

Работа со стеком. Программа, которая к вершине стека добавляет некоторое число, а следующему элементу присваивает значение предыдущего C++
Даны числовой ряд и некоторое число е найти сумму членов ряда модуль которых больше или равен е C++
Чему равна минимальная сумма первых членов последовательности, превышающая некоторое заданное число R C++

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

Или воспользуйтесь поиском по форуму:
Shman
3 / 3 / 2
Регистрация: 30.04.2012
Сообщений: 212
19.05.2012, 17:30     Задумано некоторое число #20
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
#include <stdio.h>
#include <conio.h>
 
int main()
{
 int i, k, m, n; 
   printf ("Vvedite ostatok ot deleniya x na 3, k="); // Введите остаток от деления х на 3
   scanf ("%d", &k);
   printf ("Vvedite ostatok ot deleniya x na 5, m="); // Введите остаток от деления х на 5
   scanf ("%d", &m);
   printf ("Vvedite ostatok ot deleniya x na 7, n="); // Введите остаток от деления х на 7
   scanf ("%d", &n);
  
  for (i=0; i<104; i++)
   {         
    if ((i%3)==k && (i%5)==m && (i%7)==n)  // Если остаток от деления равен введеному числу, то...
     {  
      printf("\n x= %d", i); // напечатать его
      break;
     }
  }
   if ((i%3)!=k && (i%5)!=m && (i%7)!=n)   // Если остаток от деления НЕ равен введеному числу, то..
     {
      printf ("\n Chislo ne naydeno");  // напечатать "Число не найдено" 
     }
   if ((i>=104))  // Если загаданое число больше допустимого диапазона, то..
     {
      printf ("\n Chislo ne naydeno");  // напечатать "Число не найдено" 
     }
        
 getch();
 return 0;
}
Вот! Тогда если число будет больше допустимого диапазона выведется сообщение о том, что число не найдено. Проверил на 1, 0, 2.

Добавлено через 51 минуту
C++
1
2
3
4
   if ((i%3)!=k && (i%5)!=m && (i%7)!=n || (i>=104))   // Если остаток от деления НЕ равен введеному числу...
     {                                                // или загаданое число больше допустимого диапазона, тогда..
      printf ("\n Chislo ne naydeno!");  // напечатать "Число не найдено" 
     }
Компактнее
Yandex
Объявления
19.05.2012, 17:30     Задумано некоторое число
Ответ Создать тему
Опции темы

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