Документ взят из кэша поисковой машины. Адрес оригинального документа : http://www.mmonline.ru/forum/read/7/52769/
Дата изменения: Mon Apr 11 13:38:34 2016
Дата индексирования: Mon Apr 11 13:38:34 2016
Кодировка: Windows-1251
MMOnline | Форумы | Разное | Что будет после выполнения следующей программы?

Что будет после выполнения следующей программы?

Автор темы Maxim 
22.12.2006 12:39
Что будет после выполнения следующей программы?
char arr[256];
int i,j;

arr[0]=0;

for(j=1;j<256;j+=j)
for(i=j;i<(j+j);i++)
arr[ i ]=arr[i-j]+1;

// Что будет в arr после выполнения?

Ни один из 10 программеров не смог ответить на вопрос. Имеется в виду функциональная зависимость того что в ячейке массива от индекса.

PS. Код писал я.
22.12.2006 14:33
При интерпретации Оператора arr=arr[i-j]+1; как arr[i]=arr[i-j]+1; получим
Код

сhar arr[256];
int i,j;

arr[0]=0;

for(j=1;j<256;j+=j)
for(i=j;i<(j+j);i++)
arr=arr[i-j]+1;
;

ARR =
0 1 1 2 1 2 2 3 1 2 2 3 2 3 3 4 1 2 2 3 2 3 3 4 2 3 3 4 3 4 4 5 1 2 2 3 2 3 3 4 2 3 3 4 3 4 4 5 2 3 3 4 3 4 4 5 3 4 4 5 4 5 5 6 1 2 2 3 2 3 3 4 2 3 3 4 3 4 4 5 2 3 3 4 3 4 4 5 3 4 4 5 4 5 5 6 2 3 3 4 3 4 4 5 3 4 4 5 4 5 5 6 3 4 4 5 4 5 5 6 4 5 5 6 5 6 6 7 1 2 2 3 2 3 3 4 2 3 3 4 3 4 4 5 2 3 3 4 3 4 4 5 3 4 4 5 4 5 5 6 2 3 3 4 3 4 4 5 3 4 4 5 4 5 5 6 3 4 4 5 4 5 5 6 4 5 5 6 5 6 6 7 2 3 3 4 3 4 4 5 3 4 4 5 4 5 5 6 3 4 4 5 4 5 5 6 4 5 5 6 5 6 6 7 3 4 4 5 4 5 5 6 4 5 5 6 5 6 6 7 4 5 5 6 5 6 6 7 5 6 6 7 6 7 7 8

Или учитывая изменения j = 1, 2, 4, 8, 16, 32, 64, 128 перепишем так

ARR~ =
0 1
1 2
1 2 2 3
1 2 2 3 2 3 3 4
1 2 2 3 2 3 3 4 2 3 3 4 3 4 4 5
1 2 2 3 2 3 3 4 2 3 3 4 3 4 4 5 2 3 3 4 3 4 4 5 3 4 4 5 4 5 5 6
1 2 2 3 2 3 3 4 2 3 3 4 3 4 4 5 2 3 3 4 3 4 4 5 3 4 4 5 4 5 5 6 2 3 3 4 3 4 4 5 3 4 4 5 4 5 5 6 3 4 4 5 4 5 5 6 4 5 5 6 5 6 6 7
1 2 2 3 2 3 3 4 2 3 3 4 3 4 4 5 2 3 3 4 3 4 4 5 3 4 4 5 4 5 5 6 2 3 3 4 3 4 4 5 3 4 4 5 4 5 5 6 3 4 4 5 4 5 5 6 4 5 5 6 5 6 6 7 2 3 3 4 3 4 4 5 3 4 4 5 4 5 5 6 3 4 4 5 4 5 5 6 4 5 5 6 5 6 6 7 3 4 4 5 4 5 5 6 4 5 5 6 5 6 6 7 4 5 5 6 5 6 6 7 5 6 6 7 6 7 7 8



С уважением,
Борис
22.12.2006 17:00
И что?
То что будет находиться в массиве не было сутью вопроса.

Вопрос в том - какая функциональная зависимость между тем что в массиве и индексом массива.
22.12.2006 17:59
Так а при чем тут тогда программисты? (+)
Тогда математиков надо спрашивать.
И они Вам, буркнув под нос что-то типа "тоже мне, бином Ньютона", напишут, вероятно, что-то вроде:
\sum\limits_{k=0}^\infty [({n\over 4^k}\mod 4 + 1)/2]
(под квадратными скобками понимать целую часть).
22.12.2006 18:04
Так что же?
Тут математики тоже есть (знающие C, да даже уже видны данные).

Что же это? Подробнее, можно словами.

Вопрос элементарный, я удивляюсь как еще до сих пор никто не заметил.

22.12.2006 18:07
Что значит что это?
Я написал, кажется, perfectly clear, что.
Или Вы про какой-то другой смысл?
Например, про то, что это число единиц в двоичной записи n?
22.12.2006 18:10
Да
arr[n] - это именно число единичных битов в записи n.
24.12.2006 16:34
Ну да
Я сказал, что целая часть от логарифма.
25.12.2006 08:19
bitcount
// bitcount : посчитывает единичные биты в x
int bitcount( unsigned x )
{
int b;
for(b=0; x != 0; x &= (x-1))
++b;
return b;
}
// Тондо К., Гимпел С. Язык Си. Книга ответов. 1994 - 160c.
Упражнение 2.9
25.12.2006 11:39
Способ
ARR~ =
1) 1
2) 1 2
3) 1 2 2 3
4) 1 2 2 3 2 3 3 4
5) 1 2 2 3 2 3 3 4 2 3 3 4 3 4 4 5
6) 1 2 2 3 2 3 3 4 2 3 3 4 3 4 4 5 2 3 3 4 3 4 4 5 3 4 4 5 4 5 5 6
7) 1 2 2 3 2 3 3 4 2 3 3 4 3 4 4 5 2 3 3 4 3 4 4 5 3 4 4 5 4 5 5 6 2 3 3 4 3 4 4 5 3 4 4 5 4 5 5 6 3 4 4 5 4 5 5 6 4 5 5 6 5 6 6 7
8) 1 2 2 3 2 3 3 4 2 3 3 4 3 4 4 5 2 3 3 4 3 4 4 5 3 4 4 5 4 5 5 6 2 3 3 4 3 4 4 5 3 4 4 5 4 5 5 6 3 4 4 5 4 5 5 6 4 5 5 6 5 6 6 7 2 3 3 4 3 4 4 5 3 4 4 5 4 5 5 6 3 4 4 5 4 5 5 6 4 5 5 6 5 6 6 7 3 4 4 5 4 5 5 6 4 5 5 6 5 6 6 7 4 5 5 6 5 6 6 7 5 6 6 7 6 7 7 8
Рассмотрим в таком виде
Можно рекурсивно получить из предыдущей строки следующую
пусть номер строки N, в предыдущей строке было k элементов тогда
текущая строка strN предыдущая laststr
for(i=0;i<k;i++)
{
strN[2k-1-i]=N+1-laststr;
str[N=laststr;
}



было было но прошло
Извините, только зарегистрированные пользователи могут публиковать сообщения в этом форуме.

Кликните здесь, чтобы войти