Kezdőoldal » Számítástechnika » Programozás » Hogy lehetne megvalósítani...

Hogy lehetne megvalósítani C++-ban?

Figyelt kérdés

Az lenne a problémám, hogy van egy példafeladat feladat:

Volt-e olyan hogy úgy veszítettünk, hogy előző k nap mindig nyertünk?

Erre megfelelő a következő kód:

#include <iostream>

#include <vector>

using namespace std;

bool elozo(vector<int> v,int i,int k);

int main()

{

vector<int> v;

int n=0;

cout << "n: ";

cin >> n;

cout << endl;

v.resize(n);

for(int i=0; i<n; i++){

cout << "v[" << i << "]: ";

cin >> v[i];

cout << endl;

}

int k=0;

cout << "k: ";

cin >> k;

bool h=false;

int i=k+1;

while (!h && i<=n){

h=(v[i]<0 && elozo(v,i,k));

i++;

}

if (h){

cout << "False" << endl;

} else{

cout << "True" << endl;

}

return 0;

}

bool elozo(vector<int> v,int i,int k) {

bool h=true;

int j=i-k;

while (h && j<=i-1)

{

h=(v[j]>0);

j++;

}

return h;

}


És nekem a feladatom ez:

Volt-e olyan, hogy úgy nyertünk, hogy előző k nap mindig nyertünk?

Erre így írtam át a fenti kódot:

#include <iostream>

#include <vector>

using namespace std;

bool elozo(vector<int> v,int i,int k);

int main()

{

vector<int> v;

int n=0;

cout << "n: ";

cin >> n;

cout << endl;

v.resize(n);

for(int i=0; i<n; i++){

cout << "v[" << i << "]: ";

cin >> v[i];

cout << endl;

}

int k=0;

cout << "k: ";

cin >> k;

bool h=false;

int i=k+1;

while (!h && i<=n){

h=(v[i]>0 && elozo(v,i,k));

i++;

}

if (h){

cout << "False" << endl;

} else{

cout << "True" << endl;

}

return 0;

}

bool elozo(vector<int> v,int i,int k) {

bool h=true;

int j=i-k;

while (h && j<=i-1)

{

h=(v[j]<0);

j++;

}

return h;

}


De míg az első kód működött, ez nem hajlandó a helyes megoldásra. Gondolom az én logikám nem jó. De tényleg nem jövök rá :/


Előre is köszönöm a segítséget.


2013. ápr. 21. 19:45
 1/2 A kérdező kommentje:

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

És nekem a feladatom ez:

Volt-e olyan, hogy úgy nyertünk, hogy előző k nap mindig veszítettünk?

2013. ápr. 21. 20:26
 2/2 Tóth Ádám 1985 válasza:

Már a példafeladat sem jó szerintem.

Ha a main-ben a h-t sikerül true-ra állítani, azaz teljesült a feltétel vmelyik indexen akkor leáll és kiírja hogy False

Fel van cserélve a kimenet.


Ek. ha úgy tudom a vectort 0-tól indexeljük, tehát a main-ben i k-tól megy <n-ig, nem pedig k+1-től <=n-ig


Plusz elég pazarló a megoldás, elég lenne egyszer végigmenni a számokon és számontartani hogy hányszor történt vmi (nyerés/vesztés) zsinórban, ill azt hogy épp melyikről van szó, ha váltás van akkor pedig megnézni hogy a neked kellő irányba történt-e, és a számláló >= k -e. Ha igen, végeztünk, ha nem számláló reset.


Én így csinálnám inkább (a te feladatodra):



#include "stdafx.h"

#include <iostream>

#include <vector>

using namespace std;

bool elozo(vector<int> v,int i,int k);

int main()

{

vector<int> v;

int n=0;

cout << "n: ";

cin >> n;

cout << endl;

v.resize(n);

for(int i=0; i<n; i++){

cout << "v[" << i << "]: ";

cin >> v[i];

cout << endl;

}

int k=0;

cout << "k: ";

cin >> k;

bool state = false, result = false;

int count = 0;

for (int i = 0; i < n; ++i) {

bool newstate = (v[i] > 0); //nyertunk-e

if (newstate != state) { //valtas

if (newstate && count >= k) { //vart eredmeny

result = true;

break;

}

count = 0;

}

++count;

}


if (result){

cout << "True" << endl;

} else{

cout << "False" << endl;

}

return 0;

}



A mintafeladat pedig nálam úgy néz ki, hogy a "vart eredmeny" sorban !newstate van

2013. aug. 7. 23:03
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!