Advertisement
Guest User

Untitled

a guest
Jun 24th, 2017
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.91 KB | None | 0 0
  1. /**
  2.  * \file dame.c
  3.  */
  4.  
  5. #include <stdio.h>
  6. /**\brief: dameproblem
  7.  * loest das dameproblem mit n feldern
  8.  * \return 0
  9.  */
  10.  
  11.  
  12.  
  13. /** /brief: Kontrolle
  14.  * ueberprueft ob das setzen einer Dame auf dem feld
  15.  * moeglich ist.
  16.  * /return: test
  17.  */
  18. int kontrolle (int *feld, int zeile){
  19.     int i = zeile-1;
  20.     int test =1; /*setzten moeglich, bis gegenteiligs gezeigt wird*/
  21.     int j = 1;
  22.    
  23.     if(zeile == 0) return test;
  24.     /* in der ersten zeile ist setzten immer moeglich*/
  25.    
  26.     /*kontrolliert die reihen nach oben druch */
  27.     while(i>= 0){
  28.         if(feld[i] == feld[zeile]
  29.         || feld[zeile]-j == feld[i]
  30.         || feld[zeile]+j == feld[i]) test = 0;
  31.        
  32.         j++;
  33.         i--;
  34.     }
  35.     return test;
  36. }
  37.  
  38.  
  39. int main (int argv, char** argc){
  40.     int n;
  41.     n = atoi(argc[1]); /* einelsen aus kommandozeile*/
  42.     /*weitere eingaben, wenn eingabe falsch*/
  43.   while(n <4 || n>60){
  44.     scanf("%i",&n);
  45.   }
  46.   /*erzeigt 2d-feld */
  47.   /* in jeder Zeile wird gespeichert, in welcher spalte die dame
  48.   dort steht */
  49.   int feld[n];
  50.     int j = 0;
  51.     int i = 0;
  52.  
  53.   /* anfangs stehen alle damen auf 0, also daneben*/
  54.   for(i; i<n; i++) feld[i] = 0;
  55.  
  56.   i = 0;
  57.   while(i < n){
  58.     feld[i]= feld[i]+1; /* setzt die dame ein feld nach rechts*/
  59.     /* wenn das feld vorbei ist, wird die dame zurueck gesetzt
  60.     und man geht wieder eine zeile hoeher und schiebt
  61.     dann dort weiter */
  62.     if(feld[i] >n){
  63.         feld[i] = 0;
  64.         i--;
  65.     }else{
  66.     /* wenn die dame auf dem feld stehen darf, geht es eine zeile
  67.     weiter nach unten */
  68.         if(kontrolle(feld, i) == 1){
  69.          i++;
  70.         }
  71.     }
  72.  
  73.   }
  74.   /* Ausgabe */
  75.   /* geht jede Zeile durch und gibt dort n-mal aus.
  76.     wenn dort eine Dame sthet ein "*", wenn sie da steht ein "D" */
  77.   for(i=0; i<n; i++){
  78.     for(j=1; j<=n; j++){
  79.         if(feld[i] == j){
  80.             printf(" D");
  81.         }
  82.         else{
  83.             printf(" *");      
  84.         }
  85.  
  86.     }
  87.                 printf(" \n"); /* zeileunumbruch nach jeder zeile*/
  88.   }
  89.   return 0;
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement