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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.71
airesjke
0 / 0 / 0
Регистрация: 30.10.2011
Сообщений: 20
#1

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

19.11.2011, 10:25. Просмотров 2068. Ответов 19
Метки нет (Все метки)

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

Некоторое число оканчивается на 2. Если же эту его последнюю цифру переставить на первое место, то число удвоится. Найти это число - C++
Некоторое число оканчивается на 2. Если же эту его последнюю цифру переставить на первое место, то число удвоится. Найти это число.

Некоторое число оканчивается на 2 - C++
напишите 2 задачки пожалуйста 1)Некоторое число оканчивается на 2. Если же эту его последнюю цифру переставить на первое место, то число...

Числовой ряд и некоторое число е. - C++
Даны числовой ряд и некоторое число е. Найти сумму тех членов ряда, модуль которых больше или равен заданному е. Общий член ряда имеет вид:

Побитовые операции (программа, которая интерпретирует старшие 3 бита как некоторое число n...) - C++
Уважаемые форумчане, нужна ваша помощь. Нужно составить программу, которая интерпретирует старшие 3 бита как некоторое число n и...

Чему равна минимальная сумма первых членов последовательности, превышающая некоторое заданное число R - C++
Помогите решить! Дана последовательность 1/2, 1/3, 1/4, … . Чему равна минимальная сумма первых членов последовательности, превышающая...

Не работает isdigit как задумано - C++
int main() { setlocale(LC_ALL,&quot;Russian&quot; ); cout&lt;&lt;&quot;Введите размерность массива=&quot;; int n;//размерность масива ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Байт
Эксперт C
16061 / 10330 / 1540
Регистрация: 24.12.2010
Сообщений: 19,458
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 - тогда ровно одно.
1
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;
}
}
0
Thinker
Эксперт C++
4226 / 2200 / 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;
}
3
Байт
Эксперт C
16061 / 10330 / 1540
Регистрация: 24.12.2010
Сообщений: 19,458
19.11.2011, 16:59 #5
Thinker, а первое слагаемое случаем не 35*k ?
0
Thinker
Эксперт C++
4226 / 2200 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
19.11.2011, 18:15 #6
Цитата Сообщение от Байт Посмотреть сообщение
Thinker, а первое слагаемое случаем не 35*k ?
Неа) Применил алгоритм решения системы сравнений, где модули попарно различны и попарно взаимно просты (китайская теорема об остатках). Это удивительно, что числа 21 и 15 остались, а не то, что 35 изменилось))
1
Байт
Эксперт C
16061 / 10330 / 1540
Регистрация: 24.12.2010
Сообщений: 19,458
19.11.2011, 19:52 #7
Цитата Сообщение от Thinker Посмотреть сообщение
Неа) Применил алгоритм решения системы сравнений, где модули попарно различны и попарно взаимно просты (китайская теорема об остатках). Это удивительно, что числа 21 и 15 остались, а не то, что 35 изменилось))
Тогда извиняйте. Это я из соображений симметрии. Подробно сам не смотрел, замучила текучка.
0
Thinker
Эксперт C++
4226 / 2200 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
19.11.2011, 20:28 #8
Цитата Сообщение от Байт Посмотреть сообщение
замучила текучка

Не по теме:

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

0
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;
}
0
valeriikozlov
Эксперт C++
4670 / 2496 / 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
1
Shman
3 / 3 / 2
Регистрация: 30.04.2012
Сообщений: 212
19.05.2012, 14:56 #11
valeriikozlov,
Убрали break в последнем if? Ввожу 2, 0, 6. Пишет 99 раз, что число не найдено.
0
valeriikozlov
Эксперт C++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
19.05.2012, 15:06 #12
Вы не свой код правьте, Вы мой скопируйте себе и запускайте (я не только break убрал, еще и скобки поменял).
0
Shman
3 / 3 / 2
Регистрация: 30.04.2012
Сообщений: 212
19.05.2012, 15:26 #13
valeriikozlov, теперь понял, спасибо. А почему когда вводишь 1, 0, 2 ничего не выводится? Вообще ничего.
0
grizlik78
Эксперт С++
1911 / 1443 / 112
Регистрация: 29.05.2011
Сообщений: 3,000
19.05.2012, 15:41 #14
Потому, что решением является 100, а в цикле проверяется последним 99. А после цикла проверяется как-раз 100, и поскольку остатки подходят, то и про не найденное число не сообщается.
0
valeriikozlov
Эксперт C++
4670 / 2496 / 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;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.05.2012, 15:45
Привет! Вот еще темы с ответами:

Даны числовой ряд и некоторое число е найти сумму членов ряда модуль которых больше или равен е - C++
помогите написать программу и блок схему по задаче на с++ do while Даны числовой ряд и некоторое число е найти сумму членов ряда модуль...

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

Баг или так задумано? Фишка с кодировкой файлов компиляции - C++
Visual C++ 2013 Express. От изменения кодировки созданных .cpp файлов будет зависеть то как выводятся русские буквы. Никогда раньше не...

Дано целое число. Вывести его строку-описание вида «отрицательное чет-ное число», «нулевое число», «положительное нечетное число» и т. д. - C++
Дано целое число. Вывести его строку-описание вида «отрицательное чет-ное число», «нулевое число», «положительное нечетное число» и т. д. ...


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

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

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