Follow along with the video below to see how to install our site as a web app on your home screen.
Anmerkung: This feature currently requires accessing the site using the built-in Safari browser.
würde es denn mit der Variante davor also ohne den zwei geschachtelten for schleifen auch funktionieren.
Hier wechselt der 1. Stein (von [3|5] auf [3|2]. Ok, ich sehe gerade, dass [3|2] gar nicht im Test-Set ist.1. 3/5 2. 4/2 2. 3/3 3. 4/1 4. 4/1 5. 2/5 6. 1/3 7. 1/4
Kommt bei mir wieder dieselbe Reihenfolge raus.
Eigentlich sollte rauskommen:
1. 3/2 2. 5/2 3. 2/4 4.4/1 5. 1/3 6.3/3
Äh...Also eigentlich ist es doch fasst wie beim Insertion -Sort oder ?
Da wird ja auch immer von der ausgehenden Zahl alle Zahlen verglichen und diese dann getauscht. Hier wird nur nicht das steigender Zahl geguckt sondern ob beide dann gleich sind oder ?
SteineKopie = copy(Steine)
for s in SteineKopie:
Steine = copy(SteineKopie)
Tausche s mit Stein 0 in Steine (sodass s nach dem Tausch an Stelle 0 steht)
for i in #Steine:
if berechne(i, i + 1) == 0:
best_run_value = max(i, best_run_value)
best_run_index = (s == best_run_value) ? s : best_run_index
// Da wir nicht zwischenspeichern:
Steine = copy(SteineKopie)
tausche(0, best_run_index)
berechne(0, 1)
// Ausgabe
Show, don't tell.Ich habe mir jetzt mehr darüber Gedanken gemacht .
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <stdbool.h>
int Steine[7][2];
int berechnen(int, int);
int einlesen();
int i, j, temp, temp1;
bool passt(int, int);
int drehe(int);
int tausche(int, int);
int main(){
printf("Bitte geben Sie nun 7 Dominosteine ein\n");
einlesen();
/*for(i = 0; i < 7; i++)printf("%d. %d/%d\n", (i+1) ,Steine[i][0], Steine[i][1]);*/
for(i = 0; i < 7; i++)
{
if(berechnen(i, i+1) == 0)
{
}
}
for(i = 0; i < 7; i++)
{
printf("%d. %d/%d\n", (i+1), Steine[i][0], Steine[i][1]);
}
return 0;
}
int einlesen(){
for(i = 0; i < 7; i++){
printf("%d.\n", (i+1));
for(j = 0; j < 2; j++)
scanf("%d", &Steine[i][j]);
}
return 0;
}
int drehe(int j)
{
temp = Steine[j][0];
temp1 = Steine[j][1];
Steine[j][0] = Steine[j][1];
Steine[j][1] = Steine[j][0];
Steine[j][1] = temp;
Steine[j][0] = temp1;
}
bool passt(int i,int j)
{
if(Steine[i][0] == Steine[j][0] && Steine[i][1] == Steine[j][1])
return true;
else
return false;
}
int berechnen(int i, int j) {
if(i > 7 || j > 7) return 1;
if(passt(i, j)) return 1;
else
{
drehe(j);
if(passt(i,j))
{
/*Drehen*/
drehe(j);
return 1;
}
}
else
{
if(berechnen(i,j+1) == 1)
{
tausche(i+1,j+1);
}
}
return 0;
}
int tausche(int i, int j){
temp = Steine[i][0];
temp1 = Steine[i][1];
Steine[i][0] = Steine[j][0];
Steine[i][1] = Steine[j][1];
Steine[j][0] = temp;
Steine[j][1] = temp1;
}
OkDa mir die doppelt geschachtelte Schleife mit der Schleifenbedingung mit dem Steine Array schwer fällt, habe ich jetzt noch mal das von davor nochmal geschrieben.
ANSI-C, was?#include <stdbool.h>
Insertion Sort hast du ins Gespräch gebracht. Warum willst du Insertion Sort haben?Das mittels Insertion Sort zu lösen, fällt mir in der Umsetzung schwierig.
if(Steine[i][0] == Steine[j][0] && Steine[i][1] == Steine[j][1])
int drehe(int j)
{
temp = Steine[j][0];
temp1 = Steine[j][1];
Steine[j][0] = Steine[j][1];
Steine[j][1] = Steine[j][0];
Steine[j][1] = temp;
Steine[j][0] = temp1;
}
int drehe(int j)
{
temp = Steine[j][0];
temp1 = Steine[j][1];
Steine[j][1] = temp;
Steine[j][0] = temp1;
}
Und? Was sollen wir jetzt damit? Stimmt die Ausgabe (da der Code an verschiedenen Stellen falsch ist: Nein), was ist falsch/muss anders sein?Die Ausgabe ist damit wie folgt:
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int Steine[7][2];
int berechnen(int, int);
int einlesen();
int i, j, temp, temp1;
int passt(int, int);
void drehe(int);
void tausche(int, int);
int main(){
printf("Bitte geben Sie nun 7 Dominosteine ein\n");
einlesen();
/*for(i = 0; i < 7; i++)printf("%d. %d/%d\n", (i+1) ,Steine[i][0], Steine[i][1]);*/
for(i = 0; i < 7; i++)
{
if(berechnen(i, i+1) == 0)
{
}
}
for(i = 0; i < 7; i++)
{
printf("%d. %d/%d\n", (i+1), Steine[i][0], Steine[i][1]);
}
return 0;
}
int einlesen(){
for(i = 0; i < 7; i++){
printf("%d.\n", (i+1));
for(j = 0; j < 2; j++)
scanf("%d", &Steine[i][j]);
}
return 0;
}
void drehe(int j)
{
temp = Steine[j][0];
Steine[j][0] = Steine[j][1];
Steine[j][1] = temp;
}
int passt(int i,int j)
{
if(Steine[i][0] == Steine[j][0] || Steine[i][0] == Steine[j][1])
return 1;
else
return 0;
}
int berechnen(int i, int j) {
if(i > 7 || j > 7) return 1;
if(passt(i, j)) return 1;
else
{
drehe(j);
if(passt(i,j) == 1)
{
/*Drehen*/
drehe(j);
return 1;
}
}
else
{
if(berechnen(i,j+1) == 1)
{
tausche(i+1,j+1);
}
}
return 0;
}
void tausche(int i, int j){
temp = Steine[i][0];
temp1 = Steine[i][1];
Steine[i][0] = Steine[j][0];
Steine[i][1] = Steine[j][1];
Steine[j][0] = temp;
Steine[j][1] = temp1;
}
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int Steine[7][2];
int berechnen(int, int);
int einlesen();
int i, j, temp, temp1;
int passt(int, int);
void drehe(int);
void tausche(int, int);
int main(){
printf("Bitte geben Sie nun 7 Dominosteine ein\n");
einlesen();
/*for(i = 0; i < 7; i++)printf("%d. %d/%d\n", (i+1) ,Steine[i][0], Steine[i][1]);*/
for(i = 0; i < 7; i++)
{
if(berechnen(i, i+1) == 0)
{
}
}
for(i = 0; i < 7; i++)
{
printf("%d. %d/%d\n", (i+1), Steine[i][0], Steine[i][1]);
}
return 0;
}
int einlesen(){
for(i = 0; i < 7; i++){
printf("%d.\n", (i+1));
for(j = 0; j < 2; j++)
scanf("%d", &Steine[i][j]);
}
return 0;
}
void drehe(int j)
{
temp = Steine[j][0];
Steine[j][0] = Steine[j][1];
Steine[j][1] = temp;
}
int passt(int i,int j)
{
if(Steine[i][1] == Steine[j][0])
return 1;
else
return 0;
}
int berechnen(int i, int j) {
if(i > 7 || j > 7) return 1;
if(passt(i, j) == 1) return 1;
else
{
drehe(j);
if(passt(i,j) == 1)
{
/*Drehen*/
drehe(j);
return 1;
}
else
{
if(berechnen(i, j+1) == 1)
{
tausche(i+1, j+1);
}
}
}
return 0;
}
void tausche(int i, int j){
temp = Steine[i][0];
temp1 = Steine[i][1];
Steine[i][0] = Steine[j][0];
Steine[i][1] = Steine[j][1];
Steine[j][0] = temp;
Steine[j][1] = temp1;
}
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int Steine[7][2];
int berechnen(int, int);
int einlesen();
int i, j, temp, temp1;
int passt(int, int);
void drehe(int);
void tausche(int, int);
int main(){
printf("Bitte geben Sie nun 7 Dominosteine ein\n");
einlesen();
/*for(i = 0; i < 7; i++)printf("%d. %d/%d\n", (i+1) ,Steine[i][0], Steine[i][1]);*/
for(i = 0; i < 7; i++)
{
if(berechnen(i, i+1) == 0)
{
}
}
for(i = 0; i < 7; i++)
{
printf("%d. %d/%d\n", (i+1), Steine[i][0], Steine[i][1]);
}
return 0;
}
int einlesen(){
for(i = 0; i < 7; i++){
printf("%d.\n", (i+1));
for(j = 0; j < 2; j++)
scanf("%d", &Steine[i][j]);
}
return 0;
}
void drehe(int j)
{
temp = Steine[j][0];
Steine[j][0] = Steine[j][1];
Steine[j][1] = temp;
}
int passt(int i,int j)
{
if(Steine[i][1] == Steine[j][0])
return 1;
else
return 0;
}
int berechnen(int i, int j) {
if(i > 7 || j > 7) return 0;
if(passt(i, j) == 1) return 1;
else
{
drehe(j);
if(passt(i,j) == 1)
{
/*Drehen*/
return 1;
}
else
{
if(berechnen(i, j+1) == 1)
{
tausche(i+1, j+1);
}
}
}
return 0;
}
void tausche(int i, int j){
temp = Steine[i][0];
temp1 = Steine[i][1];
Steine[i][0] = Steine[j][0];
Steine[i][1] = Steine[j][1];
Steine[j][0] = temp;
Steine[j][1] = temp1;
}