Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.12.2012, 22:25   #1
Anya She
Пользователь
 
Аватар для Anya She
 
Регистрация: 06.11.2012
Сообщений: 40
По умолчанию C++ получить числа, сумма цифр которых = n

Помогите, пожалуйста, разобраться!
я написала код, который выводит все трёхзначные числа, сумма которых равна заданному числу n. Он работает прекрасно)
Код:
#include<iostream>
using namespace std;

int main()
{
	setlocale(0, "");
	int n; // задаём число n
	int i;

	cout << "vvedite chislo" << endl;
    cin >> n; // вводим число
	
	for(int i=100; i<1000; i++)
    {
        if((i%10+i/100+((i-i%10)/10)%10)==n)
			cout<<i<<endl;
    }
system ("pause");
return 0;
}
но проблема в другом, мне решить такую же задачу, только для четырёхзначных чисел. Вроде всё просто, но программа работает неправильно. Помогите написать правильный код, и укажите, плиз, где у меня тут ошибка почему нет аналогии с трёхзначными числами.
Код:
#include<iostream>
using namespace std;

int main()
{
	setlocale(0, "");
	int n; // задаём число n
	int i;

	cout << "vvedite chislo" << endl;
    cin >> n; // вводим число
	for(int i=1000; i<10000; i++)
    {
        if((i%10+i/1000+((i-i%10)/100)%10)==n)
			cout<<i<<endl;
    }

system ("pause");
return 0;
}
Anya She вне форума Ответить с цитированием
Старый 04.12.2012, 22:40   #2
MihalNik
МегаМодератор
СуперМодератор
 
Регистрация: 27.11.2012
Сообщений: 5,714
По умолчанию

Цифра пропущена - тоже три складываете
Благими намерениями устлана дорога на programmersforum.ru
MihalNik вне форума Ответить с цитированием
Старый 04.12.2012, 22:53   #3
Anya She
Пользователь
 
Аватар для Anya She
 
Регистрация: 06.11.2012
Сообщений: 40
По умолчанию

Спасибо, огромное!! Вы мне очень помогли. как я сама не додумалась. глупая ещё
Anya She вне форума Ответить с цитированием
Старый 04.12.2012, 22:54   #4
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,376
По умолчанию

Предложил бы немного другой алгоритм (для любой значимости числа):
Код:
int m, sum;
sum = 0;
do
{
  sum = sum + m % 10;
  m = m / 10;
} while (m != 0);

Вроде так ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 05.12.2012, 14:07   #5
Anya She
Пользователь
 
Аватар для Anya She
 
Регистрация: 06.11.2012
Сообщений: 40
По умолчанию

не работает что-то...
Anya She вне форума Ответить с цитированием
Старый 05.12.2012, 14:32   #6
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Можно бы уйти от полного перебора. Примерно так:
Код:
void _PrintNumsOfDigitSum(int prefix, int digits, int sum){
  //Предусловие: 0<=sum<=9*digits
  //Предусловие: digits >=0
  //Предусловие: если prefix==0, то sum>0
  if(digits == 0){
    std::cout << prefix << std::endl;
    return;
  }
  //Особый случай: первая цифра не должна быть 0:
  if(prefix==0){
    for(int i=max(1, sum-9*(digits-1)); i<=min(9, sum); ++i){
      _PrintNumsOfDigitSum(i, digits-1, sum-i);
    }
  } else {
    for(int i=max(0, sum-9*(digits-1)); i<=min(9, sum); ++i){
      _PrintNumsOfDigitSum(prefix*10+i, digits-1, sum-i);
    }
  }
}

void PrintNumsOfDigitSum(int digits, int sum){
  if(sum<=0 || sum>9*digits) return;
  if(digits<0) return;
  _PrintNumsOfDigitSum(0, digits, sum);
}
Abstraction вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
За один просмотр файла вывести все числа, сумма цифр которых наименьшая gylayko Помощь студентам 1 06.10.2012 20:49
Программа, которая выводит на экран все четырехзначные числа, сумма цифр которых равна 7 vitaaly Паскаль, Turbo Pascal, PascalABC.NET 3 06.02.2012 15:46
Получить все меньшие натуральные числа, квадрат суммы цифр которых равен m (C) VIKA1829 Помощь студентам 0 05.04.2011 19:59
определить все двузначные числа сумма квадратов цифр которых кратна числу 15 [Pascal] mrRastom Помощь студентам 5 16.12.2010 09:47
вводим два числа, получить все меньшие n натуральные числа, квадрат суммы цифр которых равен m Sparky Помощь студентам 2 22.11.2009 21:59