Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сформировать массив M, элементы которого mi = Cn i 
:(
    Опции темы
Elaysa
Дата 20.5.2017, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 19.5.2017

Репутация: нет
Всего: нет



Сформировать массив M, элементы которого mi = Cn i , где:
Cn i = n! / i! (n - i)! , n = 20; i = 1,2,…, 5 
Помогите пожалуйста. при !20 типа уже не хватает, а как сделать, чтобы работало???
Код

#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
const int n = 20;
const int size = 6;
 
unsigned int fact(unsigned int n)
{   int r;
    for (r = 1; n > 1; r *= (n--));
    return r;
}
 
int func(unsigned int n, int i)
{// for (i=1;i<=size;i++)   
    return fact(n) / (fact(i)*fact(n - i));
    }
void array(int mas[size],int size, unsigned int n)
{   for (int i = 0; i<size; i++)
        mas[i] = func(n, i);
}
 
void printarray(int mas[size], int size)
{   for (int i = 0; i<size; i++)
        printf("%d ", mas[i]);
}
 
int main()
{
    //int i = 3;
    int mas[size];
    array(mas, size, n);
    printarray(mas,size);
 
    return 0;
}

PM MAIL   Вверх
feodorv
Дата 20.5.2017, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(Elaysa @  20.5.2017,  18:17 Найти цитируемый пост)
Помогите пожалуйста. при !20 типа уже не хватает, а как сделать, чтобы работало???

Можно использовать 64-битные переменные (long long или __int64), 64 бита должно хватить на 23!

Можно более хитро вычислять C(n,i). Например:
Код
#include <stdio.h>

int getC( int n, int i)
{
  int C = 1, k;

  if( i < n - i ) i = n - i;

  for( k = n; k > i; --k)
  {
    C *= k;
    C /= (n-k+1);
  }

  return C;
}

int main( void )
{
  int i, n;

  for( n = 0; n <= 20; ++n)
  {
    printf( "%d", getC( n, 0));
    for( i = 1; i <= n; ++i) printf( " %d", getC( n, i));
    printf( "\n" );
  }

  return 0;
}


Или так:
Код
#include <stdio.h>

int C[21][22]; // Изначально нулевые значения, это важно!!!

int main( void )
{
  int i, n;

  for( n = 0; n <= 20; ++n)
  {
    C[n][0] = 1;
    for( i = 1; i <= n; ++i) C[n][i] = C[n-1][i-1] + C[n-1][i];
  }

  for( n = 0; n <= 20; ++n)
  {
    printf( "%d", C[n][0]);
    for( i = 1; i <= n; ++i) printf( " %d", C[n][i]);
    printf( "\n" );
  }

  return 0;
}



--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1011 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.