Array mit Zufallswerten füllen, jede zahl (von1-9)darf nur 1 mal vorhanden sein?

4 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Lösung: Array mit Zahlen 1 bis 9 in normaler aufsteigender Reihenfolge füllen, und dann shufflen.

Da du von C sprichst sei noch darauf hingewiesen, dass rand() eine verdammt schlechte Verteilung hat. Bau dir lieber schnell einen eigenen kleinen Zufallszahlengenerator mit XOR-Shift oder nimm die Mersenne-Twister Referenzimplementierung. (Code dazu bei Google.)

Ansonsten, auf die Schnelle:

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

#define ARR_LEN ((size_t)9)

void dump_arr(const char version, const int *arr) {
printf("%c:", version);
for (size_t i = 0; i < ARR_LEN; ++i) {
printf(" %d", arr[i]);
}
printf("\n");
}

int main(void) {
/* Initialize */
int arr[ARR_LEN] = {0};
for (size_t i = 0; i < ARR_LEN; ++i) {
arr[i] = (int)(1 + i);
}
dump_arr('A', arr);

/* Shuffle */
srand(12345);
for (size_t i = 0; i < ARR_LEN; ++i) {
size_t idx = rand() % ARR_LEN;

arr[i] ^= arr[idx];
arr[idx] ^= arr[i];
arr[i] ^= arr[idx];
}

dump_arr('B', arr);

return EXIT_SUCCESS;
}

Die Ausgabe sieht dann z. B. so aus:

A: 1 2 3 4 5 6 7 8 9
B: 6 2 0 9 8 5 7 1 4

Wenn du bei jedem Programmstart eine andere zufällige Reihenfolge haben willst, solltest du den Pseudo-Zufallszahlen-Generator mit der Systemzeit oder ähnlichem initialisieren (also die srand() Funktion).

Die Funktion dump_arr() dient nur zu Testzwecken, also kannst du die natürlich rausschmeißen.

Und anstelle der XOR-Vertauschung kannst du natürlich auch eine temporäre Variable benutzen, wenn dir das lieber ist. Mache ich auch meistens so, aber irgendwie war mir gerade nach XOR. :)

Schönen Tag noch! :)

Wirklich nett, die xor Vertauschung kannte ich noch nicht. Kleiner Schönheitsfehler: Wenn das zu tauschende Arrayelement gleichzeitig Quelle und Ziel ist, kommt Null heraus, weil a xor a = 0. Das sieht man auch in dem Testdump an der dritten Stelle. Deshalb darf man in diesen Fällen nicht tauschen.

2
@nikolaiki

Au weia, da hast du natürlich Recht. Dass mir so ein peinlicher Anfängerfehler unterläuft ... tzzz ...

Vielen Dank für den wichtigen Hinweis! Hätte ich eigentlich wissen müssen.

1

Mach dir erst ein Array mit den Zahlen von 1 - 9 als Zahlenvorrat und mische dann. Der Mischalgorithmus ist hier beschrieben:

http://de.wikibooks.org/wiki/Einf%C3%BChrung_in_die_Informatik:_Mischen


 var stapelA= new Array(1,2,3,4,5,6,7,8,9); // Zahlenvorrat 
 var stapelB= new Array(); // Ergebnisarray
 var groeseVonB = 3; 
 for (var i = 0; stapelA.length > 0 && i< groeseVonB ; i++)
{ var zuf= Math.floor(Math.random()*(stapelA.length)); /* zufaellige Zahl */ stapelB.push(stapelA[zuf]); /* lege auf Stapel B */ stapelA[zuf]= stapelA[stapelA.length-1] /* entferne aus Stapel A */ stapelA.pop(); } alert (stapelB);



Sorry, der Link ist offenbar nicht mehr gültig

0

Welche Sprache benötigst du denn? In JS gibt es bereits die Funktion unique

Array erweitern in C?

Hallo.

Als Teil einer Methode in C zur Bestimmung, ob eine Zahl n eine perfekte Zahl ist (Summe aller echten Teiler von n ergibt n) will ich ein Array mit allen Teilern erstellen, welches dynamisch erweitert werden soll, bis alle Teiler enthalten sind. Danach soll man bestimmen können, dass die Zahl perfekt ist, wenn die Summe der Elemente n ergibt, und wenn nicht, dann nicht.

Wie kann ich das Array erweitern? Laut meinen Notizen kann man ein bestimmtes Element hinzufügen durch folgende Form (Beispiel): int array[] = { [7] = 42 } – dem achten Element wird der Wert 42 zugewiesen.

Hier mein bisheriges Programm. Der Wert von divisor soll als Element dem Array divisors[] hinzugefügt werden, wenn es sich um einen echten Teiler handelt, und zwar bis einschließlich der 1:

#include <stdio.h>
int main()
{
  int n,m,divisor,divisors[m];
  m = 0;
  printf("Geben Sie eine ganze Zahl ein.\n");
  scanf("%d",&n);
  for (divisor = n; divisor > 0;) {
    if (n % divisor == 0) {
      m++;
      divisors[m] = {[m] = divisor};
    }
    divisor--;
  }
  return 0;
}

Da meckert der aber rum:

main.c:11:27: error: expected expression before '{' token

Wie muss ich das schreiben, damit es funktioniert?

...zur Frage

JavaScript jede Sekunde mit PHP variablen füllen?

var js_array = <?php echo json_encode($php_array); ?>;

Ich muss es realisieren, dass die JavaScript variable, jede Sekunde aktualisiert. Es werden in dem PHP Array Datenbank inhalte gespeichert, und diese an das javascript Array weitergegeben.

Sobald ein neuer Datensatz in der Datenbank dazu kommt, soll er also auch in dem PHP Array und dann im javascript array hinzugefügt werden :) Wie schaff ich das?

lg. Findo1

...zur Frage

Wie überprüfe ich ob eine Zahl in einem Array nur einmal enthalten ist?

...zur Frage

Pseudocode, größte Zahl ausgeben ohne Array?

Hi, ich habe von meinem Dozenten Folgende Aufgabe bekommen, ich soll bei den Algorithmen "max6" (1-6) und "max9" (1-9) jeweils die größte Zahl ausgeben lassen ohne einen Array zu verwenden. Stehe da etwas auf den Schlauch, irgenwelche Lösungsansätze?

...zur Frage

Java array nach Zahl durchsuchen?

Hallo!

Die Aufgabe in Programmiertechnik ist es, zu beschreiben wie man vorgeht wenn man ein mit Zahlen gefülltes Array nach einer bestimmten Zahl durchsuchen und dann den Index ausgeben lassen möchte. Könnte mir dabei eventuell jemand helfen?

Danke im Voraus für jegliche Antworten!

...zur Frage

Java Editor - Array mit Zufallszahlen füllen

Hallo alle miteinander!

Und zwar möchte ich im Java Editor ein Array mit Zufallszahlen per Knopfdruck (im Frame) füllen. Wie muss ich da vorgehen? Was muss deklariert werden und was muss im button stehen?

...zur Frage

Was möchtest Du wissen?