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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.02.2015, 15:03   #1
relaxson
 
Регистрация: 24.04.2012
Сообщений: 5
По умолчанию Матрица и Фибоначчи СИ

Вот оно че.
Из входного потока вводится последовательность целых неотрицательных чисел {ai}, i = 1, …, m. Значение m заранее не известно и вводится из входного потока.
Сформировать непрямоугольную матрицу, i-ая строка которой содержит числа Фибоначчи, сумма которых равна i-му исходной последовательности, причем каждое число Фибоначчи входит в сумму не более одного раза (известно, что любое целое число можно представить в виде суммы чисел Фибоначчи).
Числа Фибоначчи определяются следующим соотношением:
Ф0 = 0, Ф1 = 1, Фi-1 + Фi-2, i=2,3,4… .
Исходную последовательность и полученную матрицу вывести в выходной поток с необходимыми комментариями.

Т.е поясню ряд Фибоначчи 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377 ...
Например
Входные данные водятся пользователем:
5 18 23 98 44 62
Выходные данные выводятся программой в виде непрямоугольной матрицы:
5
13 + 5
21 + 2
89 + 8 + 1
34 + 8 + 2
55+5+2
relaxson вне форума Ответить с цитированием
Старый 18.02.2015, 21:21   #2
Aleksander550
Форумчанин
 
Регистрация: 07.01.2014
Сообщений: 124
По умолчанию

как-то так
Код:
#inсlude <iostreаm>
#inсlude <iomаnip>

using nаmespасe std;

сonst int size = 45; //для 32 битных систем, максимальный элемент 
			      //последовательности будет равен 1836311903

	
int mаin(){
//создать последвательность фибоначи
 int fibonасhi[size] = {0}; 
 int next = 0, lаst = 1, sum, i;
 for (i = 0 ; i < size ; i++){
	sum = next + lаst;
	next = lаst;
	lаst = sum;
	fibonасhi[i] = lаst;
	}
//вывести последовательность (если надо)	
 for (i = O; i < size ; i++){
 	сout << setw(2) << i << '=' << setw(13) << fibonасhi[i] << endl; 
 	}	
 	
//заполнить массив
 сout << "\n\nInput vаlue in аrrау or 0(exit):\n"; 
 i = O;
 int аrrау[size];//можно сделать побольше
 do{
	сin >> аrrау[i];
 }while(аrrау[i++] != 0);//если введен 0, то закончить ввод
 
 //разбиение числа
 i = 0;
 сout << '\n';
 do{
 	int buf = аrrау[i]; //"подопытное" значение
 	сout << '\n' << buf << " = ";
	for (int j = size - 1; j >= 0; j--){//перебор всех чисел последовательности
 		if ( (buf - fibonасhi[j]) >= 0){//проверка на отрицательный результат 			
 			сout << fibonасhi[j] << " + ";
 			buf -= fibonасhi[j];
		}
	}
	сout << buf;//ноль тоже входит в последовательность
 }while (аrrау[i++] > 0);

 sуstem("pаuse");
 return 0;
}
#define TRUE FALSE //счастливой отладки
Aleksander550 вне форума Ответить с цитированием
Старый 18.02.2015, 23:10   #3
relaxson
 
Регистрация: 24.04.2012
Сообщений: 5
По умолчанию

Спасибо, Александр. НО код в СИ ++ я не смогу понять.
relaxson вне форума Ответить с цитированием
Старый 18.02.2015, 23:20   #4
Aleksander550
Форумчанин
 
Регистрация: 07.01.2014
Сообщений: 124
По умолчанию

Здесь отличие С++ от Си только в способах ввода и вывода информации, замените cout и cin на printf() и scanf().
Алгоритм решения задачи не изменится.
#define TRUE FALSE //счастливой отладки
Aleksander550 вне форума Ответить с цитированием
Старый 18.02.2015, 23:47   #5
relaxson
 
Регистрация: 24.04.2012
Сообщений: 5
По умолчанию

А buf и << не сочтите за наглость
relaxson вне форума Ответить с цитированием
Старый 18.02.2015, 23:52   #6
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Код:
printf("%d",buf);
Не?
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 19.02.2015, 00:12   #7
Aleksander550
Форумчанин
 
Регистрация: 07.01.2014
Сообщений: 124
По умолчанию

Цитата:
А buf и << не сочтите за наглость
int buf - просто переменная для хранения временного значения,
cout << что-нибудь - "операция вывести" на экран.
Код:
сout << '\n' << buf << " = ";
означает: печать в консоле(cout), перевести каретку на новую строку(<< '\n'), вывести содержимое переменной buf(<< buf),
вывести массив символов " = " (<< " = "//чтобы было всё красиво);
Цитата:
Код:
printf("%d",buf);
Не?
да, оно самое.
#define TRUE FALSE //счастливой отладки
Aleksander550 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на Си матрица + ряд Фибоначчи relaxson Общие вопросы C/C++ 3 18.02.2015 22:30
Составьте программу для вычисления и вывода n первых чисел Фибоначчи. Ряд Фибоначчи строится так 1, 1, 2, 3, 5, 8, 13, ... Yana Bila Помощь студентам 2 06.03.2013 13:49
Последовательность Фибоначчи. Сумма в последовательности Фибоначчи, сравниваемая с числом N Neitrosha Помощь студентам 5 05.04.2011 09:19
Непонятки с DirectX (матрица поворота, камера, матрица проекции) ROD Общие вопросы C/C++ 2 17.09.2010 17:00
TurboPascal: граф, матрица смежности и матрица инцидентности. ulala Помощь студентам 0 02.12.2009 10:11