Peršokti į turinį

Kaip mazdaug reiktu spresti toki uzdavini?


Floatas

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 2707 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Recommended Posts

Valdovė yra galingiausia šachmatų figūra. Ji gali judėti visomis kryptimis (pirmyn, atgal, kairėn, dešinė, įstrižai) neatsižvelgiant į peršokamų langelių skaičių.

Šachmatų lenta (8 x 8) sužymėta simboliais:

  • '.' (taškas) - Lentos elementas tuščias.
  • '*' (žvaigždutė) - Lentos elemento pozicijoje egzistuoja valdovė.

Kiekvienas šachmatų lentos langelis nuo greta esančio atskirtas ' ' (tarpas) simboliu. 

Raskite, kiek valdovių kerta kiekvieną langelį, ir išveskite rezultatą lentelėje.

 

Duomenys

* . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .

 

Rezultatai

1 1 1 1 1 1 1 1
1 1 0 0 0 0 0 0
1 0 1 0 0 0 0 0
1 0 0 1 0 0 0 0
1 0 0 0 1 0 0 0
1 0 0 0 0 1 0 0
1 0 0 0 0 0 1 0
1 0 0 0 0 0 0 1

 

Reikalavimai

Parašykite funkciją void, kuri suranda valdovės užimamus langelius.

Redaguota , nario Dziugauskis
Nuoroda į komentarą
Dalintis per kitą puslapį

susikuri du kintamuosius - x ir y, jų reikmėmes nustatai į lentos dimencijas (šiuo atveju abu bus 8), tada susižinai figūros padėtį tose koordinatėse (susikuri fig_x ir fig_y variables, nuskaitai inputą ir susidedi jo reikšmes (* ir .) į 2d arrayjų - "input_array") su dviem for ciklais increasini fig_x ir fig_y kintamuosius ir kiekvieną kartą tai padaręs, patikrini ar tam arrayuje dabartinėje fig_x ir fig_y pozicijoje nėra figūros (*). Jei yra, baigi ciklą ir jau turi figūros poziciją... tada su while(currentPosition_x != x || currentPosition_y != y) ciklais nusistatai langelius kuriuose gali būt figūra. pvz

 

//šitas nuskaito viską į dešinę

currentPosition_x = fig_x;

currentPosition_y = fig_y

while(currentPosition_x != x || currentPosition_y != y){

input_array[currentPosition_x - 1][currentPosition_y - 1] = "1";

currentPosition_x++;

}

 

jog į kairę, tai currentPosition_x--, jog aukštyn, tai currentPosition_y--, žemyn y++... ir t.t, kiekvienai krypčiai darai po atskirą ciklą. Kai baigi, turi input_array su vienetais ten kur reikia, tada telieka replacint taškus į nulius ir tinkamai tą arrayjų išprintint. Ir jei kartais neaišku, tai viršutinis kaurysis kampas yra x=1, y=1, apatinis dešinysis - X=8, y=8... 

Redaguota , nario ProGreen
  • Teigiamai 1
Nuoroda į komentarą
Dalintis per kitą puslapį

O kaip toks sprendimas?

#include <iostream>
#include <iomanip>
#include <fstream>
using namespace std;

#define MAXDIM 8

int currentX = 0;
int currentY = 0;
int sidewaysX = 0;
int sidewaysY = 0;

char lenta[MAXDIM][MAXDIM];

void PazymetiEjima();

int main()
{
	ifstream DuomFailas;
	DuomFailas.open("U1.txt");


	//Isivedame duomenis i lenta
	for(int i = 0;i < MAXDIM;i++)
	{
		for(int j = 0;j < MAXDIM;j++)
		{
			DuomFailas >> lenta[i][j];
		}
	}

	//nusistatome valdoves pozicija x = eilute , y = stulpelis
	for(int i = 0;i < MAXDIM;i++)
	{
		for(int j = 0;j < MAXDIM;j++)
		{
			if(lenta[i][j] == '*')
			{
				currentX = i;
				currentY = j;

				//Pasizymime pozicija istrizai
				sidewaysX = i+1;
				sidewaysY = j+1;
			}
		}
	}

	PazymetiEjima();

	//Issivedame uzbaigta lenta
	for(int i = 0;i < MAXDIM;i++)
	{
		for(int j = 0;j < MAXDIM;j++)
		{
			cout << lenta[i][j] << " ";
		}
		cout << endl;
	}

	DuomFailas.close();
    return 0;
}

void PazymetiEjima()
{
	//Tikriname viska i desine ir i apacia
	for(int i = currentX;i < MAXDIM;i++)
	{
		for(int j = currentY;j < MAXDIM;j++)
		{
			//Pazymime galima ejima per eilute , kadangi dama gali eiti per visa lenta i desine nuo savo pozicijos
			if(i == currentX) lenta[i][j] = '1';
			//Pazymime galima ejima per stulpeli ,kadangi dama gali eiti zemyn per visa lenta nuo savos pozicijos
			if(j == currentY) lenta[i][j] = '1';

			//Pazymime galima ejima istrizai ,nes...
			if(j == sidewaysY && i == sidewaysX) 
			{
				lenta[i][j] = '1'; 
				sidewaysX++;
				sidewaysY++;
			}
		}
	}

	//Paruosiame istrizai pozicija , judejimui i desines virsu
	sidewaysX = currentX-1;
	sidewaysY = currentY+1;

	for(int i = currentX;i > -1;i--)
	{
		for(int j = currentY;j < MAXDIM;j++)
		{
			if(i == sidewaysX && j == sidewaysY)
			{
				lenta[i][j] = '1';
				sidewaysX--;
				sidewaysY++;
			}
		}
	}

	////////////////////////////////////////////////////////////////


	//Paruosiame ejimo istrizai pozicija i kaire ir i virsu
	sidewaysX = currentX-1;
	sidewaysY = currentY-1;

	for(int i = currentX;i != -1;i--)
	{
		for(int j = currentY;j != -1;j--)
		{
			if(i == currentX) lenta[i][j] = '1';
			if(j == currentY) lenta[i][j] = '1';

			if(j == sidewaysY && i == sidewaysX) 
			{
				lenta[i][j] = '1'; 
				sidewaysX--;
				sidewaysY--;
			}
		}
	}

	//Paruosiame pozicija judejimui i kaires desine
	sidewaysX = currentX+1;
	sidewaysY = currentY-1;

	for(int i = currentX;i < MAXDIM;i++)
	{
		for(int j = currentY;j > -1;j--)
		{
			if(i == sidewaysX && j == sidewaysY)
			{
				lenta[i][j] = '1';
				sidewaysX++;
				sidewaysY--;
			}
		}
	}
}

Nuoroda į komentarą
Dalintis per kitą puslapį

Vargu ar imanoma paprasciau:

#include <iostream>
#include <fstream>

#define MAX 8

void rasti(int queen_x, int queen_y, int board[MAX][MAX])
{
	for (int y = 0; y < MAX; ++y)
	{
		for (int x = 0; x < MAX; ++x)
			if (queen_x == x || queen_y == y)
				board[x][y] = 1;

		if (queen_x + y < 8 && queen_y + y < 8) board[queen_x + y][queen_y + y] = 1;
		if (queen_x - y >= 0 && queen_y + y < 8) board[queen_x - y][queen_y + y] = 1;
		if (queen_x + y < 8 && queen_y - y >= 0) board[queen_x + y][queen_y - y] = 1;
		if (queen_x - y >= 0 && queen_y - y >= 0) board[queen_x - y][queen_y - y] = 1;
	}
}

int main()
{
	std::ifstream File("dat.txt");

	int board[MAX][MAX] = { 0 }; // Lentele
	int queen_x, queen_y;

	for (int y = 0; y < MAX; ++y)
	{
		for (int x = 0; x < MAX; ++x)
		{
			char character;
			File >> character;

			if (character == '*')
			{
				queen_x = x;
				queen_y = y;
				break;
			}
		}
	}

	rasti(queen_x, queen_y, board);

	for (int y = 0; y < MAX; ++y)
	{
		for (int x = 0; x < MAX; ++x)
			std::cout << board[x][y];
		std::cout << "\n";
	}

	system("pause");
}
Nuoroda į komentarą
Dalintis per kitą puslapį

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 2707 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Svečias
Ši tema yra užrakinta.
  • Šiame puslapyje naršo:   0 nariai

    • Nėra registruotų narių peržiūrinčių šį forumą.

Skelbimai


×
×
  • Sukurti naują...