Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

С++ срочно нужен хелп

13K
05 ноября 2006 года
siili
35 / / 14.10.2006
мне надо написать прогу на С++, начал писатиь, но ничего не получается. Иногда компилятор выдаёт ошибки, иногда вообще не запускает прогу.

Текст задания: написать програму для решения следующей задачи, вводиться натуральное положительное число Н, найти все такие пары чисел а и б, при условии что а = сумма делителей б(кроме самого б), и б = сумма делителей а(кроме самого а).. А и Б не привышают Н...

вот что пока у меня есть:

#include<iostream>

using namespace std;
int main()
{
int x, dal, n, i=0;
int a[n][4];

cout << "ENTER N" << endl;
cin >> n;

// zzapolnenie + summa delitelej
do{
a[0] = i + 1;
dal = 1;
do {
x = a[1] % dal;
if (x==0) a[1]=a[1] + dal;
dal++;
}while(a[0]>=dal);
cout << a[0] << " " << a[1] << endl;
i++;
}while(i<=n);

system("pause");
return 0;
}

по идеи это должно ввыводить по порядку цифры от 1 до Н, и находить сумму делителей...

Хелп плиз.....
13K
05 ноября 2006 года
siili
35 / / 14.10.2006
кто-нибудь подкинет идею???
242
05 ноября 2006 года
Оlga
2.2K / / 04.02.2006
[COLOR=red]темы называй нормально, плиз. читаем[/COLOR] правила форума.


за оптималность нe ручаюсь, но вроде работает.
Код:
#include<iostream>
using namespace std;
int search_sum(unsigned int num)
{
 unsigned int bound = num/2, sum = 0;
 for(int i = 1; i <= bound; i++)
  if(num % i == 0)
   sum += i;
 
 return sum;
}
int main()
{
 unsigned int n, a, b;
 cout << "Eter a positive number:" << endl;
 cin >> n;
 for( a = 1; a <= n; a++)
 {
  b = search_sum(a);
  if( a == search_sum(b) )
           cout<<"\ta = "<<a<<"\tb = "<<b<<endl;
 
 }
 return 0;
}

не надо удивляться когда результат типа: а == 6, b == 6.
сумма делителей числа 6: 1+2+3 == 6 => b = 6 => а == b == 6.
если надо избежать таких а и б, тогда надо изменить иф:
вместо:
 
Код:
if( a == search_sum(b) )

написать:
 
Код:
if( a != b && a == search_sum(b) )
242
05 ноября 2006 года
Оlga
2.2K / / 04.02.2006
[quote=siili]вот что пока у меня есть:[/quote]
Код:
#include<iostream>
 
using namespace std;
int main()
{
int x, dal, n, i=0;
[COLOR=darkgreen]/* нельзя объявлять массив статического размера при помощи переменной(а если бы шла речь о динaмическом массиве, тогда прежде переменной n надо задать какое то значение). */[/COLOR]
int a[[COLOR=red]n[/COLOR]][4];
 
cout << "ENTER N" << endl;
cin >> n;
13K
05 ноября 2006 года
siili
35 / / 14.10.2006
2OlgaKr:

Большое спасибо!!!!!!!!
С меня цветы и шампанское:) :) :)
13K
06 ноября 2006 года
siili
35 / / 14.10.2006
а ещё можно вопрос?? что такое bound и почему он bound = num/2??
и также не понял откуда num, это счётчик???
242
06 ноября 2006 года
Оlga
2.2K / / 04.02.2006
[quote=siili]а ещё можно вопрос?? что такое bound и почему он bound = num/2??[/quote]
насчет bound все просто. делители числа Х находятся между значениями 1 ... Х/2+1. тут я схолтурила :), из-за того что я начала for(в main) с 1-цы, я написала что bound = Х/2 (num/2). в принцепе оставила мелочи тебе на дороботку.
Цитата:

и также не понял откуда num, это счётчик???


Цитата:
. [COLOR=red]А и Б не привышают Н.[/COLOR]..


из этой фразы я сделала вывод что значения а и б находятся между 1 и Н (1 ... Н).

у нас есть число Н введенное пользователем. я сделала фор в main значение которого начинается с 1(удобней былобы хотя бы с 3, имхо. 1 и 2 всеравно не отвечают условию задачи) и заканчивается Н( А и Б не привышают Н). я беру каждое значение от 1 до Н(а == num) и нахожу для них сумму делителей(кроме самого а) и присваевую значение полученной суммы переменной б(по условию сумма делителей а должна равняться б и наоборот). затем делаем 2-ую проверку: находим сумму делителей б и проверяем равна ли она а. данное решение оснавона на моей логике, и нет гарантии что я не ошиблась.

а в общем мое решение основано на обыкновенном переборе.

13K
06 ноября 2006 года
siili
35 / / 14.10.2006
Ещё раз БОЛЬШОЕ спасибо!!!!!:)
242
06 ноября 2006 года
Оlga
2.2K / / 04.02.2006
[quote=siili]Ещё раз БОЛЬШОЕ спасибо!!!!!:)[/quote]
тут я одну проверку упустила! надо добавить иф:
 
Код:
for( a = 1; a <= n; a++)
 {
  b = search_sum(a);
 [COLOR=red] if(b > n) continue;[/COLOR]
  if( a == search_sum(b) )
           cout<<"\ta = "<<a<<"\tb = "<<b<<endl;
 
 }
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог