Вопрос по С++

dreamer

Member
Подскажите пожалуйста мне нужен массив 10000000001 елементов и больше, динамически пробовал, компилятор ругается, как еще можно создать?
или просто создать указатель и работать сним как с массивом в надежде что эти ячейки памяти не будут задейстованы?
Работа с такими объемами данных требует специальных подходов, например . Если вам уж никак не обработать данные по частям то можно использовать набор массивов меньшего размера, динамически выделенных разумеется.
 

Пух

كنت بلهاء
Модератор
есть массив с 16ти элементов. Нужно заполнить его так, что бы было 12 нулей и 4 единицы. Единицы и нули должны быть в случайном порядке.

Код:
#include<stdio.h>
#include<stdlib.h>

void sl(int a[],int size,int q){
int i,j,k,flag;
 for (i=0;i<size;i++){
   a[i]=-1; 
     do{
	flag=0;
	k=random(q);
	    for (j=0;j<i;j++){
		if (k==a[j])
		   flag=1;
	     }
       }while(flag);
    a[i]=k;
  }
}

void main(){
  int a[16]={0},i, *p=NULL;
  randomize();
  p=(int*)malloc(4*sizeof(int));

  if (p==NULL){
    printf("ERROR");
    exit(1);
  }
  sl(p,4,16);

  for (i=0;i<4;i++)
     a[*(p+i)]=1;
  
  for (i=0;i<16;i++)
     printf("%d ",a[i]);
  
  free(p);
}
делал вот так. Функция sl генерирует массив размером size так, что в нем расположенные случайные числа в диапазоне [0;q) и эти числа не повторяются.
Я свой массив "а" заполняю изначально нулями, а потом в 4х случайных местах нули меняю на 1.
Вопрос: можно это сделать как-то красивей и короче?
 

TraNceR

Member
Код:
int a[16] = {0};
int num = 0;
while (num != 4)
{
       int n = rand()%16;
       if (a[n] == 1) continue;
       a[n]  = 1;
       num++;
}
если я верна понял)
код не проверял
 

dreamer

Member
есть массив с 16ти элементов. Нужно заполнить его так, что бы было 12 нулей и 4 единицы. Единицы и нули должны быть в случайном порядке.
Вопрос: можно это сделать как-то красивей и короче?
Лучше всего делать нужный массив и перемешивать:
Код:
алгоритм перемешивание массива:
    для каждого элемента массива кроме последнего:
        поменять местами текущий элемент и случайный, находящийся не перед текущим 

перемешать массив[1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0]
надеюсь псевдокод разберете
 

Пух

كنت بلهاء
Модератор
Как "длинное" число поделить на "длинное" ? Напишите хотя бы алгоритм.
 

TraNceR

Member
Пух,
ето не тривиальный алгоритм, также столбиком делишь как и руками :)
 

Стася

Загадка
Нужно список поделить на два стека: в одном - цифры, в другом - буквы.
Есть ли функция, которая распознаёт цифры (или буквы)?
 

Пух

كنت بلهاء
Модератор
Нужно список поделить на два стека: в одном - цифры, в другом - буквы.
Есть ли функция, которая распознаёт цифры (или буквы)?
вроде какая-то есть, можно сделать без функций. В списке будем хранить все элементы как char.
Код:
char n;//символ с списка
if (n >= '0' && n <= '9')  
/*по ASCII таблице все цифры(буквы тоже) идут подряд.
Если n лежит в этом диапазоне, значит это число. */
 add1(n) // добавляем в 1 стек(там где числа int) 
                 
else 
 add2(n) // иначе добавляем в 2 стек (там где буквы).
Лучше описать 1 стуктуру стек, в которой будет поле char. Описать 2 указателя на вершины стека (для каждого из стеков по 1). Для добавления в стек передавать как параметр указатель на вершину того стека, к которому нужно добавить элемент.
Что бы изменить тип с char на int (для подсчета каких-то значений), используй
Код:
int k;
char n='5';
k=n-'0';  //k имеет тип int и равно 5.
 
Останнє редагування:
Зверху