Pranav Popat Ответов: 2

Как решить проблему превышения лимита времени?


- Привет!
Я пытался написать код для заполнения случайных чисел в массиве (используя srand) таким образом, чтобы ни одно число не повторялось. Во время исполнения я получил сообщение о превышении лимита времени.
Как я могу решить эту проблему?
Ниже приведен код:

#include<iostream>
using namespace std;
#include<cstdlib>
#include<ctime>
int main()
{
	srand(time(NULL));
	int *deck=new int[52];
	for(int i=0;i<52;i++)
		deck[i]=-1;
	int j,top=-1;
	while(top!=51)
	{
		j=rand()%52;
		if(top==-1)
		{
			top++;
			deck[top]=j;
		}
		else
		{
			int flag=0,f=0;
			while(deck[flag]!=-1||flag!=52)
			{
				if(deck[flag]==j)
					f=1;
				flag++;
			}
			if(flag==top+1&&f==0)
			{
				top++;
				deck[top]=j;
			}
		}
	}
	for(int k=0;k<52;k++)
	{
		cout<<deck[k]<<endl;
	}
	return 0;
}


Что я уже пробовал:

Я попробовал использовать printf и scanf вместо cin и cout, так как они быстрее, но не работают.

[no name]

Как вы получили сообщение о превышении лимита времени? По почте? Телефонный звонок? Конный курьер? И кто или что его прислало?

Ничто в коде, который вы опубликовали, не посылает такого рода сообщения. Итак, простой ответ: для какого-то неизвестного компонента выполнение вашего кода занимает слишком много времени, как говорится в сообщении. Сделать его быстрее.

2 Ответов

Рейтинг:
2

Patrice T

Насколько я помню, массив и указатель на массив не используют один и тот же синтаксис. И я вижу синтаксис для доступа к элементам массива по указателю.

Указатели На C++ [^]

Вы также должны прочитать эти книги:
Язык программирования Си - Википедия, свободная энциклопедия[^]
https://hassanolity.files.wordpress.com/2013/11/the_c_programming_language_2.pdf[^]
http://www.ime.usp.br/~ПФ/Керниган-Ритчи/с-Программирование-электронные книги.формат PDF[^]

Язык Программирования C++ [^]


Рейтинг:
0

Jochen Arndt

Этот while петля

while(deck[flag]!=-1||flag!=52)

будет исполняться до тех пор, пока flag это 52. Это похоже на
while(flag!=52)


Чтобы выйти из цикла при выполнении первого условия, используйте AND операция:
while(deck[flag]!=-1 && flag!=52)