matrix auf bestimmte eigenschaften prüfen...



  • bin schon den ganzen tag am rumbasteln und irgendwie langsam am verzweifeln...ich will ein prog schreiben das die anzahl verschiedener magischer quadrate der ordnung n prüft.
    den algorithmus dafür hab ich jetzt so gut wie fertig, brauche nur noch eine programmroutine die eine n*n matrix dadrauf prüft ob sie die zahlen von 1 bis n² enthält und die prüft ob alle splaten-, zeilen- und diagonalensummen die gleichen sind. das letzte ist garnich mal so das problem, nur das prüfen ob alle zahlen von 1 bis n² drin sind krieg ich nich gebacken...

    kunt



  • du musst uns schon ein wenig entgegenkommen. etwas von dem ansatz bitte 😉
    willst du nur eine n*n "matrix" (wie auch immer implementiert) durchsuchen, um zu wissen, dass alle werte von 1 bis n² enthalten sind? zeig uns einfach mal die rahmenbedingungen und mach einen vorschlag, wie du es lösen würdest. eine idee hast du doch sicher 🙂



  • so wei bin ich schon:

    #include <iostream.h>
    
    int a,b,c,d,e,f,g,h,i,w,x,y,n,vert,horiz,diag1,diag2,magicnumber=(n*n+1)*n/2;
    int square[3][3];
    
    void main(void)
    {
    	n=3;
    	w=0;
    	for(a=1;a<9;a++)
    	{
    		for(b=1;b<9;b++)
    		{
    			e=5;
    			c=15-a-b;
    			i=10-a;
    			h=10-b;
    			g=-5+a+b;
    			d=20-2*a-b;
    			f=-10+2*a+b;
    
    			square[1][1]=a;
    			square[1][2]=b;
    			square[1][3]=c;
    			square[2][1]=d;
    			square[2][2]=e;
    			square[2][3]=f;
    			square[3][1]=g;
    			square[3][2]=h;
    			square[3][3]=i;
    
    			for(x=diag1=diag2=0;x<n;x++)
    			{
    				for(y=vert=horiz=0;y<n;y++)
    				{
    					vert += square[x][y];
    					horiz += square[y][x];
    				}
    				if(vert==magicnumber&&horiz==magicnumber)
    				{
    					diag1 += square[x][x];
    					diag2 += square[x][(n+1)-x];
    				}
    			}
    			if(vert==magicnumber && horiz==magicnumber && diag1==magicnumber && diag2==magicnumber)
    			w++;	
    
    		}
    	}
    	cout << "Es existieren " << w <<" magische Quadrate\nder Ordnung 3.\n";
    }
    

    das mit dem prüfen ob alle zahlen von 1 bis n² vorhanden sind krieg ich aber nich gebacken...

    kunt



  • Wie wäre es, wenn Du das Feld Zeile für Zeile durläufst, und bei jeder Zahl erstmal die Wurzel ziehst. 🙄

    int merker[n*n];
    for(i=0; i<3; i++)
     for(j=0; j<n; j++)
     {
       merker[i*n+j]=sqrt(square[i][j]);
     }
    

    Dann kannst Du da Feld sortieren und gucken, ob alle Zahlen da sind.


Anmelden zum Antworten