Avatar billede madox Nybegynder
11. september 2005 - 09:57 Der er 6 kommentarer og
1 løsning

Generere en random rækkefølge af en liste af tal

Jeg har defineret et 2d array: arr[4][2] og bliver initialiseret til { {0,0}, {1,0}, {2,0}, {0,1} }
Tallene står i den "numerisk" rækkefølge som jeg defineret det. Mit problem er så at jeg gerne vil have en TILFÆLDIG rækkefølge af de inderste array
fx { {1,0}, {2,0}, {1,0}, {0,1} }

men hvordan kan man opnå dette?
Avatar billede arne_v Ekspert
11. september 2005 - 10:07 #1
mener du yderste array altså at de 4 par skal shuffles tilfældigt omkring ?
Avatar billede arne_v Ekspert
11. september 2005 - 10:17 #2
det kan gøres som:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int a[4][2] = { {0,0}, {1,0}, {2,0}, {0,1} };

int main()
{
    int i,j,b[4],tmp;
    /* print */
    for(i=0;i<4;i++) printf("(%d,%d)",a[i][0],a[i][1]);
    printf("\n");
    srand(time(NULL));
    /* construct array with random numbers */
    for(i=0;i<4;i++) b[i] = rand();
    /* sort original array after random array */
    for(i=0;i<3;i++)
        for(j=(i+1);j<4;j++)
            if(b[i]>b[j])
            {
                tmp = b[i];
                b[i] = b[j];
                b[j] = tmp;
                tmp = a[i][0];
                a[i][0] = a[j][0];
                a[j][0] = tmp;
                tmp = a[i][1];
                a[i][1] = a[j][1];
                a[j][1] = tmp;
            }
    /* print */
    for(i=0;i<4;i++) printf("(%d,%d)",a[i][0],a[i][1]);
    printf("\n");
    return 0;
}
Avatar billede arne_v Ekspert
11. september 2005 - 10:17 #3
ren C - kan laves lidt kønnere i C++
Avatar billede madox Nybegynder
11. september 2005 - 10:17 #4
ja, det er de inderste arrays der skal placeres tilfældigt i det yderste
Avatar billede arne_v Ekspert
11. september 2005 - 10:31 #5
med C++ swap:

#include <iostream>
#include <algorithm>
#include <cstdlib>
#include <ctime>

using namespace std;

int a[4][2] = { {0,0}, {1,0}, {2,0}, {0,1} };

int main()
{
    int b[4];
    /* print */
    for(int i=0;i<4;i++) cout << "(" << a[i][0] << "," << a[i][1] << ")";
    cout << endl;
    /* construct array with random numbers */
    srand(time(NULL));
    for(int i=0;i<4;i++) b[i] = rand();
    /* sort original array after random array */
    for(int i=0;i<3;i++)
        for(int j=(i+1);j<4;j++)
            if(b[i]>b[j])
            {
                swap(b[i],b[j]);
                swap(a[i][0],a[j][0]);
                swap(a[i][1],a[j][1]);
            }
    /* print */
    for(int i=0;i<4;i++) cout << "(" << a[i][0] << "," << a[i][1] << ")";
    cout << endl;
    return 0;
}
Avatar billede madox Nybegynder
11. september 2005 - 11:11 #6
Tak for hjælpen. Skriver du lige et svar
Avatar billede arne_v Ekspert
11. september 2005 - 11:19 #7
kommer her
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester