1. Получить с клавиатуры значения n1 и n2.
2. Для каждого A из диапазона [n1,n2] выполнить следующие действия:
2.1. Найти сумму его делителей B.
2.2. Если B принадлежит [n1,n2], то выполнить следующие действия:
2.2.1. Для числа B найти сумму его делителей C.
2.2.2. Если C=A, то вывести A и B.
K> for (int B=n1; B<=n2; B++) K> { K> int C=0; K> for (int i=1;i<B;i++) K> {if (B%i==0) C=C+i; K> else (C==A) printf("\nNumber %d drug\n",A,C); K> } K> }
На шаге 2.2 ("ЕСЛИ") почему-то вместо if написан for. Еще появились какие-то два else, хотя в алгоритме нет ни одного слова "ИНАЧЕ". Да и вывод на печать в алгоритме идет в одном месте, а не в двух, потому что оптимизацией заниматься еще рано.
Здравствуйте, Katenok, Вы писали:
K>for (int A=n1; A<=n2; A++) K> { K> int B=0; K> for (int i=1;i<A;i++) K> {if (A%i==0) B=B+i; K> } K> {if (B=n1 && B<=n2)
Во-первых, не =, а >=. Во-вторых, "если ..., то выполнить СЛЕДУЮЩИЕ ДЕЙСТВИЯ:". То есть в фигурные скобки должен быть заключен список следующих действий, а не сам if.
K> int C=0; K> for (int i=1;i<B;i++) K> {if (B%i==0) C=C+i; K> if (C==A) printf("\nNumber %d drug\n",A,B); K> }
Надо сначала досчитать делители, а потом уже сравнивать результат. А ты наоборот, пытаешься сравнивать внутри цикла по i — опять скобка не там. Кроме того, ты выводишь два числа, а %d написан только один раз. Второе не выведется.
Здравствуйте, desperado_gmbh, Вы писали:
_>Кажется, пора приделывать к этому заголовок и пробовать откомпилировать, а потом запустить. Ну разве что пробел между A и B вывести не помешает
не работает, ошибок не выдает, ввожу n1 n2 и все конец программы никаких дружественных чисел не выводит
Здравствуйте, desperado_gmbh, Вы писали:
_>Здравствуйте, Katenok, Вы писали:
K>> не работает, ошибок не выдает, ввожу n1 n2 и все конец программы никаких дружественных чисел не выводит
_>Покажи еще раз полный текст. Какие n1 и n2 вводишь?
для n1= 156 n2=864, да какие тут не вводила ни на что не реагирует
#include <math.h>
#include <iostream>
using namespace std;
#include <stdio.h>
#include <windows.h>
void main ()
{
int n1, n2;
char str[128];
CharToOem("Введи значение n1 ",str);cout<<str;cin>>n1;
CharToOem("Введи значение n2 ",str);cout<<str;cin>>n2;
for (int A=n1; A<=n2; A++)
{
int B=0;
for (int i=1;i<A;i++)
if (A%i==0) B=B+i;
if (B=n1 && B<=n2)
{int C=0;
for (int i=1;i<B;i++)
if (B%i==0) C=C+i;
if (C==A) printf("\nNumber %d drug\n",A,B);
}
}
}
Здравствуйте, Katenok, Вы писали:
K>>> не работает, ошибок не выдает, ввожу n1 n2 и все конец программы никаких дружественных чисел не выводит
Вот это ты писала два часа назад. Я ответил, что можно запускать.
K> if (B>=n1 && B<=n2) K> {int C=0; K> for (int i=1;i<B;i++) K> if (B%i==0) C=C+i; K> if (C==A) cout <<A<<B<<"\n"; K> }
А вот что ты запускаешь:
K> if (B=n1 && B<=n2) K> {int C=0; K> for (int i=1;i<B;i++) K> if (B%i==0) C=C+i; K> if (C==A) printf("\nNumber %d drug\n",A,B); K> }
У меня вот еще какая проблема возникла, некоторые библиотеки не активны, в одной задачке #include "stdafx.h" не срабатывает пишет "fatal error C1083: Cannot open include file: 'stdafx.h': No such file or directory", а если убираю то ему не нравится по тексту long long и компилятор за него цепляется. а в другой ругается на strlen, если подключаю #include <string.h> #include <strstream.h> , то пишет тоже самое "fatal error C1083: Cannot open include file:"
Вот не получается в этой задачке выполнить первое задание "найти количество трехзначных чисел", получилось только найти эти числа и распечатать их... подскажите плиз как посчитать выведенные числа???
Найти количество трехзначных чисел, кратных 15, но не кратных 30. Распечатать эти числа
#include <iostream>
using namespace std;
#include <windows.h>
#include <math.h>
#include <stdio.h>
void main ()
{
int c, ka=0, kost=0;
for (int i = 105; i < 1000; i ++)
{
if(i%15==0 && i%30!=0)
cout<<i<<endl;
}
Здравствуйте, Katenok, Вы писали:
K>Вот не получается в этой задачке выполнить первое задание "найти количество трехзначных чисел", получилось только найти эти числа и распечатать их... подскажите плиз как посчитать выведенные числа???
K>Найти количество трехзначных чисел, кратных 15, но не кратных 30. Распечатать эти числа
Ну, поехали!
K>#include <iostream>
K>using namespace std;
// Зачем включены вот эти три заголовка? Ты же ими вообще не пользуешься.
K>#include <windows.h>
K>#include <math.h>
K>#include <stdio.h>
K>void main ()
K>{
// Что это за переменные? В дальнейшем они нигде не используются, а c ещё и не инициализирована.
K> int c, ka=0, kost=0;
K> for (int i = 105; i < 1000; i ++)
K> {
K> if(i%15==0 && i%30!=0)
K> cout<<i<<endl;
K> }
// Нужна ещё одна закрывающая скобка. Ну, видимо, это опечатка была
}
Пара замечаний вне текста программы:
1) Ты ввела переменные c, ka, kost. Их имена "не говорящие".
Есть "общечеловеческие" соглашения о смысле коротких имён: примерно такие
— i,j,k — индексы
— n,m — размеры (количество)
— c,s — подсчитываемое количество и сумма (count, sum)
— x,y,z, u,v — значения (компонентов многомерного пространства и скалярные)
— t — время или промежуточная переменная
— конвенции, принятые в предметной области (например, физике или экономике)
Если привить переменной существенно иной смысл, не вытекающий ни из конвенции, ни из сокращения в очевидном контексте (скажем, s может значить sum, size, source) — то это внесёт путаницу.
Альтернатива — это давать длинные имена, иногда с префиксом, означающим тип: nSum, szSource.
Куцые сокращения, особенно на русско-английском — очень мрачно. kost это исковерканное cost (стоимость), или k_ostatok, или что-то ещё?
Разделение слов в идентификаторе можно выполнять
— прыгающим регистром
— — первая часть в верхнем регистре, вторая в нижнем (как бы в субскрипте)
— — — Ftr = сила трения, F(orce — принятый физический знак) tr(enija — транслит, но если с программой связан текст, где фигрурирует Fтр, то это приемлемо)
— — капитализация первых букв
— — — SumOddNumbers
— подчёркиванием
— — — sum_odd_numbers
— — — f_tr
Есть разные рекомендации по выбору того или иного стиля, главное — не мешать их.
2) По алгоритму.
У тебя цикл for(i=105;i<1000;++i)
Почему ты начала не с 100 (это же тоже трёхзначное)? Наверное, потому что первое трёхзначное, интересующее тебя — это 105.
Тогда зачем инкрементировать на 1? Можно сразу на 15 и более не проверять делимость на 15.
for(i=105;i<1000;i+=15).
Пойдём дальше. Каждое второе из чисел, делящихся на 15, делится на 30. Просто возьмём и перепрыгнем через них:
for(i=105;i<1000;i+=30)
То есть нам вообще нет нужды проверять делимость внутри цикла!
А подсчитать количество чисел очень просто: заведи счётчик (не забудь обнулить перед входом в цикл) и внутри цикла инкрементируй его.
Здравствуйте, Katenok, Вы писали:
K>Эти переменные остатки от текста программы где я пыталась посчитать числа... у меня почему то считает до 1 и все
Ладно, не хочешь сама убрать заголовки (тоже остались?) — уберу я
Но вот бешеное форматирование (произвольные отступы и неряшливо расставленные фигурные скобки) — исправляй.
Переменная sum объявлена и инициализируется внутри цикла. Естественно, что если ты её всё время обнуляешь, то что она там сосчитает?
Вытащи её перед циклом.
Кроме того, если i начинается со 105 с шагом 30, то условие i%15==0 && i%30!=0 всегда истинно.
Вот постаралась посимпатичней отформатировать, sum вытащила вперед но все равно считает тока до 1
#include <iostream>
using namespace std;
void main ()
{
int i;
int sum=0;
for(i=105;i<1000;i+=30)
{ cout<<i<<endl;}
{sum++; cout<<"sum="<<sum<<endl;}
}
Здравствуйте, Katenok, Вы писали:
K>Вот постаралась посимпатичней отформатировать, sum вытащила вперед но все равно считает тока до 1
Замечательно! Красиво отформатированная программа сразу покажет тебе, где ты опять наступаешь на грабли.
K>#include <iostream>
K>using namespace std;
K>void main ()
K>{
K>int i;
K>int sum=0;
K>for(i=105;i<1000;i+=30)
K> { cout<<i<<endl;} // относится ли этот блок к циклу?
K> {sum++; cout<<"sum="<<sum<<endl;} // а этот блок - относится?
// Правомерно ли ты сделала отступ, как бы говоря, что блок внутри цикла?
K>}
В каком из блоков должно выполнятся увеличение sum?
Вот так она считает но выводит sum каждый раз после i по возрастающей
#include <iostream>
using namespace std;
void main ()
{
int i;
int sum=0;
for(i=105;i<1000;i+=30)
{ cout<<i<<endl;
{sum++; cout<<"sum="<<sum<<endl;}
}
}