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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.12.2011, 19:34   #1
m00nJinn
Новичок
Джуниор
 
Регистрация: 09.12.2011
Сообщений: 3
По умолчанию числа армстронга

Хай всем кто есть!)) задана задача: число армстронга - такое число из k цифр у которого сумма k-x степеней его цифр равна самому числу пример: 153=1*1*1+5*5*5+3*3*3 надо найти 5 наибольших чисел армстронга , состоящих из не более чем n цифр.
ввод: 4 вывод: 371 407 1634 8208 9474
ввод: 1 вывод: 5 6 7 8 9

вот что наляпал: но 100% неправильно
#include <iostream>
#include <cmath>

using namespace std;

int main () {
int n;
int d=0;
cin>>n;
for (int i;i<=9;i++) {
for (int j;j<=9;j++) {
for (int a;a<=9;a++) {
for (int b;b<=9;b++) {
for (int c;c<=9;c++) {
d=i+10*j+100*a+1000*b+10000*c;
n=n*1,0;
if (pow(i,n)+pow(j,n)+pow(a,n)+pow(b,n )+pow(c,n)=d) cout<<d;
}
}

}
}

}
return 0;
}
какое правильное решение??
m00nJinn вне форума Ответить с цитированием
Старый 09.12.2011, 21:27   #2
Ezhuk
Форумчанин
 
Регистрация: 09.10.2010
Сообщений: 217
По умолчанию

Код:
int arm(int val){
	int cval=val;
	int t=val; int n=0; // n- разряд числа 
	while(t){t/=10;++n;}
	int res=0;
	do{
		t=val%10;//берем младший разряд 
		res+=(int)pow(double(t),n); 
		val/=10;//сдвигем чисо на один разряд вправо
		if(res>cval ) return -1; // ускоряет примерно на 30%, если при N = 9, то наверно больше.
	}while(val); // проверка на  окончания подсета 
	return res;
}
int   main ()
{
	int N=4;int Q=5;
	cout<<"N:\t";
	cin>>N;
	//cout<<"Q:\t";
	//cin>>Q;
	if(N<1 || N>9 || Q <1) return -1; // проверка на корректный ввод
	int MAX= ( int)pow(10.0,N)-1; // максимальное число N разряда 
	int count =0; // cчетчик найденных чисел
	
	for( int val=MAX;val>=0 && count < Q;val--){
		if(arm(val)==val){ cout<<val<<endl; ++count ; } 	
	}
	return 0;

}
Вот так 100% правильно =)
Ёж птица гордая, пока не пнешь не полетит.
Ezhuk вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Числа Армстронга KOMPNET Помощь студентам 6 09.10.2011 02:55
Аксиомы Армстронга Mikuro Общие вопросы по программированию, компьютерный форум 0 08.10.2011 19:38
Найти все числа Армстронга от 1 до k наташка-ромашка Общие вопросы Delphi 3 31.03.2011 18:21
нахождение чисел Армстронга kabum13 Microsoft Office Excel 5 29.12.2010 14:45
Программа нахождения числа Армстронга (с++) Fantasy13 Помощь студентам 4 09.12.2010 23:53