Pereiti prie turinio

Rekomenduojami pranešimai

Sveiki, prisegtoje nuotraukoje draugo KTU laboras, bet užkabino ir mane. Žodžiu, kokių turit įdėjų, jog kodas nuspręstų, kokius būdus taikyt, jog gauti reikiamą skaičių. Kaip jūs darytumėt tą skaičiavimo algoritmą? Kodo neprašau, prašau tik jūsų įdėjų, kokiu principu kodas dirbtų, jog gautų skaičių.

Asmeniškai aš galvoju, bandyti visas galimas galimybes ir skaičiuoti.. Oj, daug ciklų.. :lol:

Ačiū atsiliepusiems.

 

užduotis

Redagavo ArrMkaZ
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Kadangi laiko limitas 5 sekundes, o is viso yra tik 1024 variantu, tai uzteks ir paprasto brute force

 

http://snag.gy/CNd1J.jpg

 

Tai paprasciausiai imi pirma skaiciu, atlieki 4 operacijas naudodamasis antru skaiciu.

Tada gauni 4 rezultatus.

Su tais keturiais rezultatais vel atlieki 4 veiksmus naudodamas 3 skaiciu.

Gauni 16 rezultatu.

Ir t.t. kol gausi teisinga atsakyma

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Kadangi laiko limitas 5 sekundes, o is viso yra tik 1024 variantu, tai uzteks ir paprasto brute force

 

http://snag.gy/CNd1J.jpg

 

Tai paprasciausiai imi pirma skaiciu, atlieki 4 operacijas naudodamasis antru skaiciu.

Tada gauni 4 rezultatus.

Su tais keturiais rezultatais vel atlieki 4 veiksmus naudodamas 3 skaiciu.

Gauni 16 rezultatu.

Ir t.t. kol gausi teisinga atsakyma

 

Skaiciai ne eiles tvarka eina man atrodo? Tai siuo modeliu turetu but 16 operaciju (4 skaiciai * 4 veiksmai) kiekviename zingsnyje?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Tame ir esmė, kad gauni 6 skaičius. Iš jų gauni kokį atsakymą ir ant to atsakymo reikia dar kart panaudot kitą atsakymą arba dar nepanaudotą skaičių. Nežinau kaip padaryt, turbūt bus -2 balai ir turėsiu dar savaitę kažką ekspermentuot, nes laborą atsiskaityt tai reikia :D. Informatikos inžineriją studijuoju, pasiėmiau programų sistemų modulį, bet dabar žiūriu, kad be reikalo :D

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Parasiau sioki toki sito darbo sprendima, kuris spausdinta atsakymus, tikiuosi issingarinesi koda ir kita karta mokesi spresti tokio tipo uzdavinius. Beje, cia yra daug ka tobulinti, pvz skaiciuoja minusinius skaicius, galima koda suprastinti ir pan.

 

#include <iostream>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <vector>
#include <iomanip>
#include <cstdio>
#define pop pop_back
using namespace std;

struct v{
   int a, b, ats;
   char oper;
};

vector <v> veiksmai;

int ats;

bool pazymeti[10001]={false};
int P[10000] = {0};


void ieskok(int P[], int sz, bool pazymeti[], int rez){
   if(rez == ats){
       for(int i  = 0;  i < veiksmai.size(); i++){

           cout << veiksmai[i].a << " " << veiksmai[i].oper << " " << veiksmai[i].b << "  = "<< " " << veiksmai[i].ats << endl;

       }
       cout << endl;
       return;
   }
   for(int i = 0; i < sz; i++){
       for(int e = i+1; e < sz; e++){

           if(P[i]!= 0 && P[e] != 0 && !pazymeti[i]&&!pazymeti[e]){
               // sudeti
               int top = P[i], kek = P[e];
               pazymeti[i] = true;
               pazymeti[e] = true;
               P[sz]=top+kek;

               v f;
               f.ats = top+kek;
               f.a = top;
               f.b = kek;
               f.oper = '+';
               veiksmai.push_back(f);

               ieskok(P,sz+1,pazymeti, top + kek);

               veiksmai.pop();

               P[sz]=0;
               pazymeti[i] = false;
               pazymeti[e] = false;

                // atimtus
               pazymeti[i] = true;
               pazymeti[e] = true;
               P[sz]=top-kek;


               f.ats = top-kek;

               f.oper = '-';
               veiksmai.push_back(f);

               ieskok(P,sz+1,pazymeti, top - kek);

               veiksmai.pop();

               P[sz]=0;
               pazymeti[i] = false;
               pazymeti[e] = false;

                // daugyba
               pazymeti[i] = true;
               pazymeti[e] = true;
               P[sz]=top*kek;
               f.ats = top*kek;
               f.oper = '*';
               veiksmai.push_back(f);

               ieskok(P,sz+1,pazymeti, top * kek);

               veiksmai.pop();

               P[sz]=0;
               pazymeti[i] = false;
               pazymeti[e] = false;

                // dalyba
               if(top!= 0 && kek != 0)
                   if(top%kek == 0 or kek % top == 0)
                   {
                       int div;
                       if(top%kek==0)div = top/kek;
                       else div = kek/top;
                       pazymeti[i] = true;
                       pazymeti[e] = true;
                       P[sz]=top*kek;

                       f.a = (top % kek == 0) ? top : kek;
                       f.b = (top % kek == 0) ? kek : top;
                       f.ats = div;
                       f.oper = '/';
                       veiksmai.push_back(f);

                       ieskok(P,sz+1,pazymeti, div);

                       veiksmai.pop();

                       P[sz]=0;
                       pazymeti[i] = false;
                       pazymeti[e] = false;
                   }

           }

       }
   }
}
int main()
{
   ifstream fd("mag.txt");

   for(int i = 0; i < 6; i++)
   {
       fd >> P[i];
   }

   fd >> ats;

   ieskok(P,6,pazymeti, 0);

   return 0;
}

Nuoroda į pranešimą
Dalintis kituose puslapiuose
  • po 3 savaičių...

Visa programa atrodo(yra šiektiek klaidų skaičiavimuose):

 

post-94181-0-96630200-1425901027_thumb.png

 

Programos kodas:

 

Skaičiai.h

#pragma once
#include <string>
#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;
#include "Skaičius.h"
class Skaičiai
{
public:
static const int Cd = 1;	//	kiek didinti dinaminį masyvą
private:
Skaičius *Sk;				//	dinaminis skaičių masyvas
int Elementai[12];			//	statinis skaičių masyvas, skirtas saugoti skaičiams, nuskaitytiems iš failo
int n;						//	elementų skaičius
int ats;					//	skaitmuo, kurį reikia gauti naudojant aritmetinius veiksmus
int nmax;					//	masyvo talpumas - maksimalus
void KeistiMasyvą(int kiek);
public:
Skaičiai (int nmx = 0);
~Skaičiai();

void push_back(Skaičius SK);				// įrašo objektą į dinaminį masyvą
Skaičius Imti(int ind) { return Sk[ind]; }	// grąžina nurodyto indekso objektą iš masyvo
void pop_back();			//	panaikina paskutinį elementą iš dinaminio masyvo
int size();					//	grąžina masyvo elementų skaičių
void NuskaitytiIrDėtiSkaičius(); //nuskaito tekstinį failą ir sudeda skaičius į masyvą
void ieškotiSprendinių(int es, bool pažymėti[], int rez, ofstream& rf,	// ieško sprendinių, surašo duomenis į dinaminį masyvą 
					   Skaičiai& pp, Skaičius& yy, int &index);						// ir spausdina duomenis į tekstinį failą
void RastiSprendiniusIrRašyti(); //randa sprendinius ir surašo į tekstinį failą
};

Skaičiai.cpp

#include "Skaičiai.h"

/** Konstruktorius sukuria "tuščią" dinaminį masyvą, kai nmx = 0;
kai nmx > 0, sukuria dinaminį masyvą be duomenų
@param nmx – masyvo dydis */
Skaičiai::Skaičiai(int nmx): Sk(NULL), n(0), nmax(nmx)
{
if (nmax > 0)
{ Sk = new Skaičius[nmax]; }
}

Skaičiai::~Skaičiai() { if (Sk) delete [] Sk; }

/** Keičia dinaminio masyvo dydį
@param kiek – naujas masyvo dydis */

void Skaičiai::KeistiMasyvą(int kiek)
{
if (kiek > nmax)  // jeigu masyvas yra didinamas
{								
	Skaičius *Snaujas = new Skaičius [kiek];
	for(int i = 0; i < n; i++)
		Snaujas[i] = Sk[i];
	delete [] Sk;
	Sk = Snaujas;
	nmax = kiek;
}

else if (kiek < nmax)		// jeigu masyvas yra mažinamas
{
	Skaičius *Snaujas = new Skaičius [kiek];
	for(int i = 0; i < kiek; i++)
		Snaujas[i] = Sk[i];
	delete [] Sk;
	Sk = Snaujas;
	n = nmax = kiek;
}
}

/** Patalpina naują studentą į masyvo pabaigą
@param stud – naujas studentas */

void Skaičiai::push_back(Skaičius SK)
{
if (n == nmax) KeistiMasyvą(n + Cd);
Sk[n] = SK;
n++;
}
void Skaičiai::pop_back()	{ KeistiMasyvą(n-1);		}
int Skaičiai::size()		{ return n;				}

void Skaičiai::NuskaitytiIrDėtiSkaičius()
{
ifstream df ("Duomenys.txt");
for (int i = 0; i < 6; i++)
	df >> Elementai[i];
df >> ats;
}

void Skaičiai::RastiSprendiniusIrRašyti()
{
ofstream rr("Rezultatai.txt");
rr << setw(30) << "----------------------------------" << endl;
rr << setw(30) << left << "|  Pradiniai duomenys  |" << endl;
rr << setw(30) << "----------------------------------" << endl; rr << "| ";
for(int i=0; i<6;i++)
	rr << setw(5) << Elementai[i] << ""; rr << " |" << endl;
rr << "| "; rr << setw(38) << ats; rr << "|" << endl;
rr << setw(30) << "----------------------------------" << endl << endl << endl;

rr.close();

Skaičiai PP;
Skaičius YY;
bool pažymėti[12] = { false };
int ElementųSkaičius = 6;
int skaitliukas = 0;
ofstream rf("Rezultatai.txt", ios::app);
ieškotiSprendinių(ElementųSkaičius, pažymėti, ats, rf,PP, YY, skaitliukas);
if(skaitliukas == 1) {
	ofstream ff("Rezultatai.txt", ios::app);
	ff << "Sprendinių neturi" << endl;
	ff.close();}
rf.close();
}

void Skaičiai::ieškotiSprendinių(int es, bool pažymėti[], int rez, ofstream& rf,
							 Skaičiai& pp, Skaičius& yy,int& index)
{
if(rez == ats)
{ index++;
	for(unsigned int i = 0; i < pp.size(); i++) //sukasi max iki 5, nes max 5 veiksmai
		rf << pp.Imti(i).ImtiA() << " " << pp.Imti(i).ImtiOper() << " " <<
		pp.Imti(i).ImtiB() << " =" << " " << pp.Imti(i).ImtiRez() << endl;
	// tikrina ar yra nepanaudotų elementų
	bool ArYraNepanaudotų = false;
	int skaitliukas = 0;
	for(int t = 0; t < 6; t++)
		if(!pažymėti[t]){
			ArYraNepanaudotų = true;
			skaitliukas++;}
	if(skaitliukas <= 3){
	if(ArYraNepanaudotų == true){
		rf << "Nepanaudoti elementai: ";
	for(int g = 0; g < 6; g++)
		if(!pažymėti[g]) rf << Elementai[g] << " "; }
	rf << endl << endl;}
}
for(int i = 0; i < es; i++){
	for(int e = i+1; e < es; e++){
		if(Elementai[i] != 0 && Elementai[e] != 0 && !pažymėti[i] && !pažymėti[e]){
			//sudėti
			pažymėti[i] = true; pažymėti[e] = true;
			Elementai[es] = Elementai[i] + Elementai[e];

			yy.DėtiRezultatą(Elementai[i]+Elementai[e]);
			yy.DėtiA(Elementai[i]);
			yy.DėtiB(Elementai[e]);
			yy.DėtiOper('+');
			pp.push_back(yy);

			ieškotiSprendinių(es+1, pažymėti, Elementai[i]+Elementai[e], rf,pp,yy,index);

			pp.pop_back();

			Elementai[es] = 0;
			pažymėti[i] = false; pažymėti[e] = false;

			//atimtis
			pažymėti[i] = true; pažymėti[e] = true;
			Elementai[es] = Elementai[i] - Elementai[e];

			yy.DėtiRezultatą(Elementai[i] - Elementai[e]);
			yy.DėtiOper('-');
			yy.DėtiA(Elementai[i]);
			yy.DėtiB(Elementai[e]);
			pp.push_back(yy);

			ieškotiSprendinių(es+1, pažymėti, Elementai[i]-Elementai[e], rf,pp,yy,index);

			pp.pop_back();

			Elementai[es]=0;
			pažymėti[i] = false; pažymėti[e] = false;

			//daugyba
			pažymėti[i] = true; pažymėti[e] = true;
			Elementai[es] = Elementai[i] * Elementai[e];
			yy.DėtiRezultatą(Elementai[i]*Elementai[e]);
			yy.DėtiOper('*');
			yy.DėtiA(Elementai[i]);
			yy.DėtiB(Elementai[e]);
			pp.push_back(yy);

			ieškotiSprendinių(es+1, pažymėti, Elementai[i]*Elementai[e], rf,pp,yy,index);

			pp.pop_back();

			Elementai[es]=0;
			pažymėti[i] = false; pažymėti[e] = false;

			//dalyba
			if(Elementai[i] != 0 && Elementai[e] != 0)
				if(Elementai[i]%Elementai[e] == 0 || Elementai[e] % Elementai[i] == 0)
				{
					int div;
					if(Elementai[i]%Elementai[e] == 0) div = Elementai[i] / Elementai[e];
					else div = Elementai[e]/Elementai[i];
					pažymėti[i] = true; pažymėti[e] = true;
					Elementai[es] = Elementai[i]*Elementai[e];

					yy.DėtiA( (Elementai[i] % Elementai[e] == 0) ? Elementai[i] : Elementai[e]);
					yy.DėtiB( (Elementai[i] % Elementai[e] == 0) ? Elementai[e] : Elementai[i]);
					yy.DėtiRezultatą(div);
					yy.DėtiOper('/');

					pp.push_back(yy);

					ieškotiSprendinių(es+1, pažymėti, div, rf,pp,yy,index);

					pp.pop_back();

					Elementai[es] = 0;
					pažymėti[i] = false; pažymėti[e] = false;
				}

		}
	}
	}

}


Skaičius.h

#pragma once
class Skaičius
{
private:
int REZ, a,b;	// kintamieji, skirti saugoti skaičiavimo tarpiniams rezultatams
char oper;		// kintamasis, kuris saugo operatoriaus simbolį
public:
Skaičius(): REZ(0), a(0), b(0), oper() { }

void DėtiRezultatą	(int k)		{ REZ  = k;		}
void DėtiA			(int j)		{ a	   = j;		}
void DėtiB			(int h)		{ b	   = h;		}
void DėtiOper		(char c)	{ oper = c;		}

int  ImtiRez ()				{ return REZ;	}
int  ImtiA   ()				{ return a;		}
int	 ImtiB   ()				{ return b;		}
char ImtiOper()				{ return oper;	}
};


Skaičius.cpp

#include "Skaičius.h"
MyForm.h

#pragma once
#include "Skaičiai.h"
namespace LD1SuGUI {

using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;

/// <summary>
/// Summary for MyForm
/// </summary>
public ref class MyForm : public System::Windows::Forms::Form
{
public:
	MyForm(void)
	{
		InitializeComponent();
		//
		//TODO: Add the constructor code here
		//
	}

protected:
	/// <summary>
	/// Clean up any resources being used.
	/// </summary>
	~MyForm()
	{
		if (components)
		{
			delete components;
		}
	}
private: System::Windows::Forms::Button^  button1;
protected: 
private: System::Windows::Forms::Label^  label1;
private: System::Windows::Forms::RichTextBox^  richTextBox1;
private: System::Windows::Forms::Button^  button2;

private:
	/// <summary>
	/// Required designer variable.
	/// </summary>
	System::ComponentModel::Container ^components;

#pragma region Windows Form Designer generated code
	/// <summary>
	/// Required method for Designer support - do not modify
	/// the contents of this method with the code editor.
	/// </summary>
	void InitializeComponent(void)
	{
		this->button1 = (gcnew System::Windows::Forms::Button());
		this->label1 = (gcnew System::Windows::Forms::Label());
		this->richTextBox1 = (gcnew System::Windows::Forms::RichTextBox());
		this->button2 = (gcnew System::Windows::Forms::Button());
		this->SuspendLayout();
		// 
		// button1
		// 
		this->button1->Font = (gcnew System::Drawing::Font(L"Courier New", 19.8F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, 
			static_cast<System::Byte>(186)));
		this->button1->Location = System::Drawing::Point(12, 465);
		this->button1->Name = L"button1";
		this->button1->Size = System::Drawing::Size(331, 52);
		this->button1->TabIndex = 0;
		this->button1->Text = L"Skaičiuoti";
		this->button1->UseVisualStyleBackColor = true;
		this->button1->Click += gcnew System::EventHandler(this, &MyForm::button1_Click);
		// 
		// richTextBox1
		// 
		this->richTextBox1->Location = System::Drawing::Point(12, 12);
		this->richTextBox1->Name = L"richTextBox1";
		this->richTextBox1->Size = System::Drawing::Size(412, 428);
		this->richTextBox1->TabIndex = 2;
		this->richTextBox1->Text = L"";
		this->richTextBox1->TextChanged += gcnew System::EventHandler(this, &MyForm::richTextBox1_TextChanged);
		// 
		// button2
		// 
		this->button2->Location = System::Drawing::Point(349, 465);
		this->button2->Name = L"button2";
		this->button2->Size = System::Drawing::Size(75, 52);
		this->button2->TabIndex = 3;
		this->button2->Text = L"Išjungti";
		this->button2->UseVisualStyleBackColor = true;
		this->button2->Click += gcnew System::EventHandler(this, &MyForm::button2_Click);
		// 
		// MyForm
		// 
		this->AutoScaleDimensions = System::Drawing::SizeF(8, 16);
		this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
		this->BackColor = System::Drawing::Color::Yellow;
		this->ClientSize = System::Drawing::Size(437, 529);
		this->Controls->Add(this->button2);
		this->Controls->Add(this->richTextBox1);
		this->Controls->Add(this->label1);
		this->Controls->Add(this->button1);
		this->Name = L"MyForm";
		this->Text = L"MyForm";
		this->Load += gcnew System::EventHandler(this, &MyForm::MyForm_Load);
		this->ResumeLayout(false);
		this->PerformLayout();

	}
#pragma endregion
private: System::Void MyForm_Load(System::Object^  sender, System::EventArgs^  e) {
		 }
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
			 button1-> Text = L"Skaičiuojama...";
			 button1->Enabled = false;	 
			 Skaičius AA;
			 Skaičiai PP;
PP.NuskaitytiIrDėtiSkaičius();
PP.RastiSprendiniusIrRašyti();
label1->Text = L"Programa suskaičiavo";
button1-> Text = L"Baigta";
richTextBox1->LoadFile("Rezultatai.txt",
RichTextBoxStreamType::PlainText);

		 }
private: System::Void richTextBox1_TextChanged(System::Object^  sender, System::EventArgs^  e) {
		 }
private: System::Void button2_Click(System::Object^  sender, System::EventArgs^  e) {
		 Application::Exit();
	 }
};
}

Redagavo geras1448
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...