Форум программистов, компьютерный форум CyberForum.ru Форум программистов | Компьютерный форум | Форум web-программистов | Форум по электронике и бытовой технике | Форум о софте | Научный форум | Карьера и бизнес
CyberForum.ru - форум программистов и сисадминов > > >
Восстановить пароль Регистрация

Ответ Создать новую тему
 
dimoncheg
Форумчанин
9 / 9 / 1
Регистрация: 18.10.2012
Сообщений: 141
05.12.2012, 15:12     Найти все натуральные числа от промежутка от 0 до 200. Проверить задачу
  #1
Найти все натуральные числа из промежутка от 1 до 200, у которых сумма делителей равна S (S вводить с клавиатуры).

Что-то попытался, но ответ пишет странный мягко говоря. Подскажите пожалуйста что-нибудь по этому поводу. Заранее спасибо.

Код 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
#include <stdio.h> 
#include <stdlib.h> 
 
main() 
{ 
       int S,x, n,i;
printf("\n Введите S: "); 
 scanf("%d", &S); 
 
 
for (n = 1; n <= 200; n++){
    x=0;
    for (i = 1;i <= n; i++){
     
        if (n % i == 0){    
              x=x+i;
             
        } 
        if(S==x){ printf("%d\n", x);}
            }
}
 
system("pause");
}
AdAgent
Объявления
05.12.2012, 15:12
ps10n1ck
Форумчанин
50 / 44 / 1
Регистрация: 10.11.2010
Сообщений: 132
05.12.2012, 15:41
  #2
Найти все натуральные числа из промежутка от 1 до 200, у которых сумма делителей равна S
если я правильно понял, то это выглядит так:
промежуток: (1, 2, 3, 4, 5 .... 200]
в данном варианте сумма делителей если я правильно понял - разложение числа из промежутка на простые числа и проверка суммы этих простых чисел на равенство S?
dimoncheg
Форумчанин
9 / 9 / 1
Регистрация: 18.10.2012
Сообщений: 141
05.12.2012, 15:52  [ТС]
  #3
Цитата Сообщение от ps10n1ck Посмотреть сообщение
если я правильно понял, то это выглядит так:
промежуток: (1, 2, 3, 4, 5 .... 200]
в данном варианте сумма делителей если я правильно понял - разложение числа из промежутка на простые числа и проверка суммы этих простых чисел на равенство S?
Кажется да.. Я просто мягко говоря не очень силен в С++, мне тут один человечек помог и убежал, а я вот сижу и разбираюсь, и на ответ выводит всякую бяку. Целый час сижу и пытаюсь в суть проблемы вникнуть. Может можно по-другому реализовать?
ps10n1ck
Форумчанин
50 / 44 / 1
Регистрация: 10.11.2010
Сообщений: 132
05.12.2012, 15:56
  #4
постараюсь что-то придумать, пока алгоритма нормального не придумал, все что в голову приходит, это просто методом перебора, но это тупо =). В течении дня, появится свободное время - попробую реализовать что-то путное.
dimoncheg
Форумчанин
9 / 9 / 1
Регистрация: 18.10.2012
Сообщений: 141
05.12.2012, 16:16  [ТС]
  #5
Цитата Сообщение от ps10n1ck Посмотреть сообщение
постараюсь что-то придумать, пока алгоритма нормального не придумал, все что в голову приходит, это просто методом перебора, но это тупо =). В течении дня, появится свободное время - попробую реализовать что-то путное.
ваш ответ в теме уже что-то для меня значит, уже большое спасибо) теперь буду молиться чтобы мне или вам пришло в голову "что-то путное".
ps10n1ck
Форумчанин
50 / 44 / 1
Регистрация: 10.11.2010
Сообщений: 132
08.12.2012, 15:20     Найти все натуральные числа от промежутка от 0 до 200. Проверить задачу
  #6
Код 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
#include <iostream>
#include <vector>
#include <numeric>
 
using std::cout;
using std::cin;
using std::endl;
 
typedef unsigned int uint;
 
int main(){
  setlocale(LC_ALL, "Rus");
  uint S = 0;
  uint sum = 0;
 
  cout << "Введите сумму делителей: ";
  cin >> S;
 
  std::vector<int> v;
  std::vector<int> vsum;
  std::vector<int>::iterator i;
 
  for(uint i = 1; i <= S; ++i){
    for(uint j = 1; j <= i; ++j) {
      if(i%j == 0)
        v.push_back(j);
    }
  sum = std::accumulate(v.begin(), v.end(), 0);
  if(sum == S)
    vsum.push_back(i);
  v.erase(v.begin(), v.end());
  }
  
  if(vsum.size() > 0){
    cout << "Натуральные числа из промежутка у которых сумма делителей = " << S << endl;
    for(i = vsum.begin(); i != vsum.end(); ++i)
      cout << *i << " ";
    cout << endl;
  }
  else
    cout << "Промежуток не содержит натуральных чисел у которых сумма делителей = " << S << endl;
 
   
   system("pause");
return 0;
}
Yandex
Объявления
08.12.2012, 15:20
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать новую тему

Похожие темы
Тема Раздел Автор Дата
C++ Найти все натуральные числа из промежутка от 1 до 200, у которых количество делителей равно N
Найти все натуральные числа из промежутка от 1 до 200, у которых количество делителей равно N (N вводить с клавиатуры).
С++ для начинающих kissik 14.05.2014 18:48
C++ Найти все натуральные числа из промежутка от 1 до 200, у которых сумма делителей равна S
Найти все натуральные числа из промежутка от 1 до 200, у которых сумма делителей равна S. (S вводить с клавиатуры) #include <stdio.h> #include <conio.h> #include <locale.h> #include...
С++ для начинающих Любовь1993 16.04.2014 03:32
Turbo Pascal Найти все натуральные числа из промежутка от 1 до 200. у которых количество делителей равно N (N вводить с клавиатуры)
Найти все натуральные числа из промежутка от 1 до 200. у которых количество делителей равно N (N вводить с клавиатуры)
Turbo Pascal OlesyaK 09.07.2013 20:29
C++ Найти все натуральные числа из промежутка от 1 до 200
Помогите решить контрольную задачу, с объяснениями! Пожалуйста!!! Найти все натуральные числа из промежутка от 1 до 200,у которых сумма чётных делителей равна N.
С++ для начинающих dimbasic 23.12.2012 15:48
C++ Найти все натуральные числа из промежутка от 1 до 200, у которых сумма четных делителей равна N (проверить)
Найти все натуральные числа из промежутка от 1 до 200, у которых сумма четных делителей равна N #include "stdafx.h" #include <iostream> #include <locale> using namespace std; void _tmain() ...
С++ для начинающих Shnichel 16.12.2012 00:41
C++ Найти все натуральные числа из промежутка от 1 до 200. Проверить программу
Здравствуйте. Пожалуйста подскажите в чем тут ошибка? Выдаёт неккоректный ответ. Найти все натуральные числа из промежутка от 1 до 200, у которых сумма делителей равна S (S вводить с клавиатуры). ...
С++ для начинающих dimoncheg 06.12.2012 17:27
Turbo Pascal Найти все симметричные натуральные числа из промежутка от А до В
Найти все симметричные натуральные числа из промежутка от А до В (А и В вводятся с клавиатуры
Turbo Pascal Proskurina 01.02.2012 19:55
Pascal ABC Найти все натуральные числа из промежутка
1. Найти все натуральные числа из промежутка от 1 до 200, у которых количество делителей равно N (N вводить с клавиатуры).
Pascal ABC Lubimka 03.01.2012 20:45
Опции темы

Текущее время: 20:38. Часовой пояс GMT +4.

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.7 PL3
Copyright ©2000 - 2014, vBulletin Solutions, Inc.