Другие языки программирования и технологии

Работаю в Visua C++ 2008. консольное приложение Win32/

Нужно вывести одномерный массив с рандомными числами от нуля до семи, так чтобы цифры не повторялись, не знаю как реализовать. Если вам не трудно помогите пожалуйста. Вот мой код:
// laba 12.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include
#include
#include
#include
#include
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{srand(time(0));
setlocale(LC_ALL, "");
int i,j,a[8],x,y=0,b,kol=0,k,buf;
for(i=0;i<8;i++)
{
a[i]=rand()%7;

}

for(i=0;i<8;i++)
{cout<<a[i]<<" ";
}
cout<<endl;
system("pause");
return 0;
}
__Роман __
__Роман __
64
Я не рекомендую Вам использовать вложенные циклы с условием для выделения не повторяющихся чисел - много будет ресурсов кушать. Оптимальнее будет создать отдельный массив заполненный в произвольном порядке числами от 0 до 7, и обращаться к его значениям. Можно задать рандомно индекс, с которого начинать считывать и шаг. Если шаг задавать рандомно, необходим учитывать, что при четном колич-ве элементов шаг должен быть нечетным числом, и наоборот, в другом случае. Ваш код не нужно менять особо, только дополните цикл, где идет заполнение массива а [8]. Сделать это можно, например, так:
int _tmain(int argc, _TCHAR* argv[])
{
srand(time(0));
const int n(8); int a[n];
int b[] = {0, 1, 4, 2, 7, 5, 6, 3};
int side(rand()%8); int step(2*rand()%4+1);
int index(side);

for (int i(0); i < 8; i++)
{
index+=step;
index = (index > 7)? index-8: index;
a[i] = b[index];
cout << a[i] << endl;
};
return 0;
}
Pro 100 Shodik - [Lm]
Pro 100 Shodik - [Lm]
10 096
Лучший ответ
А что не так в текущей реализации?
Валерий Цалов
Валерий Цалов
50 628
__Роман __ В данной реализации повторяются цифры1
В цикле генерации рандома вставить цикл проверки на присутствие нового числа в массиве. Если присутствует - не заносить.
int m;
int n=0;
int k;
while n<8 {
m=rand()%7;
k=0;
for (i=0;i<n;i++){
if (a[i]==m)
k=1;
}
if (k=0) {a[n]=m;n++}
}

}
если не ошибся
int a[]={0,1,2,3,4,5,6,7};
for(int i=0;i<8;i++)
std::cout<<a[i]<<" ";не?

#include "iostream"
#include "ctime"
int main(){
srand(time(NULL));
int a[8],b,i=0;
while (i!=8){
int n = 1;
b = rand() % 8;
for (int j = 0; j < i; j++){
if (a[j] == b){
n = 0;
break;
}
}
if (n){
a[i] = b;
i++;
}
}
for (int i = 0; i < 8; i++)
std::cout << a[i]<<" ";
system("pause");
return 0;
}
Петр Ефременко
Петр Ефременко
31 781
Валерий Цалов Там же с рандомными.
Петр Ефременко тогда так как-нибудь
#include "iostream"
#include "ctime"
int main(){
srand(time(NULL));
int a[8],b,i=0;
while (i!=8){
int n = 1;
b = rand() % 8;
for (int j = 0; j < i; j++){
if (a[j] == b)
n = 0;
}
if (n){
a[i] = b;
i++;
}
}
for (int i = 0; i < 8; i++)
std::cout << a[i]<<" ";
system("pause");
return 0;
}