valdas3 (+1276)
Forumas
Programavimas. Klausimai del užduočių, kurių nesuprantu C++.
mendinskis (+1455)
O kaip tai padaryti? tikrinimas poromis
DEMO +1000
max=A[0]+A[1];
max0=A[0];
max1=A[1];
for (int i=1; i<n; i++)
{
if (A[i]+A[i+1]>max)
{
max0=A[i];
max1=A[i+1];
}
}
mendinskis (+1455)
#include <iostream>Sveiki, noreciau paklausti del vieno uzdavinio. Tekstiniame faile
#include <iomanip>
#include <fstream>
using namespace std;
const int Cmax=10;
const char CD[]="Duomenys.txt";
const char CR[]="Rezultatai.txt";
void Skaitymas(int & n, int & k, int A[], int a);
void TikRasymas(int n, int k, int A[]);
int main(){
int n, k, A[Cmax], a;
Skaitymas(n, k, A, a);
TikRasymas(n, k, A);
}
void Skaitymas(int & n, int & k, int A[], int a){
ifstream fd(CD);
fd >> n >> k;
for(int i=0; i<n; i++){
fd >> A[i];
}
fd.close();
}
void TikRasymas(int n, int k, int A[]){
ofstream fr(CR);
if(A[0]==1 && A[2]==1){
A[1]==0;
}
}
6 2
0 1 0 1 1 1
noreciau tikrinti po viena nari ar jis attitinka tuos 3 punktus pvz 0, 1 ir t.t. Susidariau masyva ir kaip reiktu pasiekti jo tarikme 5 nari? (numeruoju nuo 0). Suprantu, kad reiktu daryti taip A[4], bet cia jei butu duota aiskus masyvo vietu skaicius. Cia taip nera duota raide n, kuri gali kisti. Tad kaip pasiekti reikiama masyvo nari?
pakeista prieš 13 m
mendinskis (+1455)
Na ar taip minciu nera? Uzdaviinys nera olimpiadinis. Tik tas tikrinimas masyvu susuka galva...
DEMO +1000
mendinskisNa ar taip minciu nera? Uzdaviinys nera olimpiadinis. Tik tas tikrinimas masyvu susuka galva...
Mendinski, niekas nesėdi 24 valandas prie math24 ir pamatęs naują programavimo uždavinį, kaip matai, niekas nepuola spręsti. Aš tik viens durnelis užsiėmiau aiškinti. Reiks išeit atostogų... :D
O, tarp kitko, geriausia spręsti visiškai savarankiškai, nors tai gali užtrukt nežinia kiek laiko - savaitę, mėnesį ar metus. Vienas žmogus pasauly pasakė - bet kokia pažanga galima tik sraigės žingsniu.
Tu visą teoriją žinai, dabar reikia mokytis kurt ir ieškoti - tai viso mokslo esmė. Argi daug pažengi, jei sprendimą pasako kas nors kitas? Juolab dažnai egzistuoja ne vienas sprendimo būdas ir kiekvienam sprendėjui reikia atrasti savo stilių. Uždaviniai ir jų sprendimai gali būt įvairiausi - čia visko neiškalsi...
Grįžtant prie uždavinio, galiu pasiūlyt tokią funkciją (ją tau reiktų papildyt taip, kad būtų ieškoma didžiausio degusių ir nedegusių lempų skaičiaus)
void naujanaktis(int A[], int B[], int n, int k)
{
for (int i=1; i<k; i++)
{
if ((i+1)%2==0) // pirmas ir paskutinis žibintas turi tik vieną kaimyną,
{ // todėl 1 ir 2 punktai jiems negalioja
B[1]=1;
B[n]=1;
}
else
{
B[1]=0;
B[n]=0;
}
for (int j=2; j<=n-1; j++)
{
if (A[j-1]==1 && A[j+1]==1)
B[j]=0;
else
{
if (A[j-1]!=A[j+1])
B[j]=1;
else
{
if ((i+1)%2==0)
B[j]=1;
else
B[j]=0;
}
}
}
for (int i=1; i<=n; i++)
A[i]=B[i];
}
}Ir aš tikrai nesakau, kad tai pats geriausias būdas. Galbūt galima tai užrašyt ir gražiau.
pakeista prieš 13 m
mendinskis (+1455)
Lukai, aciu sprendziu tai tikrai savarankiskai, bet paprasciausiai jauciu dideli teoriniu ziniu trukuma (tikrai teorijos visos nezinau). Del to, kad savarankiskai uzdavinys turi buti issprestas visiskai sutinku, bet tam yra kaimas, kur nera interneto, nes niekaip nepaprasysiu kazkieno pagalbos :D. Grizau i prienus, nes norejau susizinoti anglu VBE rezultataus ir kaip tik ruosiausi ideti programavimo uzdavini, kuris kaime niekaip neisejo(praleidau mazdaug diena), o va tik besiruosiant deti uzdavini i viena foruma pats ji issprendziau... Niekaip nesupratu kodel :D reiks paziureti kas negerai... Bet siaip algoritma pasirinkau siek tiek kitoki nei tavo.
DEMO +1000
Parodyk savo algoritmą, man įdomu.
pakeista prieš 13 m
mendinskis (+1455)
#include <iostream>
#include <iomanip>
#include <fstream>
using namespace std;
const int Cmax=10;
const char CD[]="Duomenys.txt";
const char CR[]="Rezultatai.txt";
void Skaitymas(int & n, int & k, int A[], int a);
void TikRasymas(int n, int k, int A[]);
int main(){
int n, k, A[Cmax], a;
Skaitymas(n, k, A, a);
TikRasymas(n, k, A);
}
void Skaitymas(int & n, int & k, int A[], int a){
ifstream fd(CD);
fd >> n >> k;
for(int i=0; i<n; i++){
fd >> A[i];
}
fd.close();
}
void TikRasymas(int n, int k, int A[]){
ofstream fr(CR);
if(k%2==0){
A[0]=1;
A[n-1]=1;
}
else
A[0]=0;
A[n-1]=0;
for(int i=1; i<n; i++){
if(A[i-1]==1 && A[i+1]==1){
A[i]=0;
}
else if ((A[i-1]==1 && A[i+1]==0) || (A[i-1]==0 && A[i+1]==1)){
A[i]=1;
}
else if(A[i-1]==0 && A[i+1]==0){
if(k%2==0){
A[i]=1;
}
else
A[i]=0;
}
cout << A[0] << " " << A[i] << " " << A[n-1] << " " ;
}
}
Zinoma kaip visada padarau kazka blogai, nes paskutini skaiciu gaunu bloga ir for cikle ka ir reikia tvarkyti.
DEMO +1000
if(A[i-1]==1 && A[i+1]==1){
A[i]=0;
}
else if ((A[i-1]==1 && A[i+1]==0) || (A[i-1]==0 && A[i+1]==1)){
A[i]=1;
}
else if(A[i-1]==0 && A[i+1]==0){
if(k%2==0){
A[i]=1;
}
Čia pažeidžiamas trečio negalimo dėsnis (sąlyginis sakinys negali turėt dviejų else šakų).
Be to, jei pirmą else šaką ir išmestume, būtų blogaiif(A[i-1]==1 && A[i+1]==1){
A[i]=0;
}
else {if(A[i-1]==0 && A[i+1]==0){
if(k%2==0){
A[i]=1;
}
}
Gaunasi tokia logika: jei A, tai B, priešingu atveju, jei A, tai C. Bet priešingu atveju A jau negali būti. Čia loginė klaida.
Ir apskritai, tu turėtum sudaryti vis naują masyvą, o ne keisti to paties masyvo narius. Vienam ciklo žingsnyje tu pakeiti masyvo narius, kitam ciklo žingsny jau daromi veiksmai su naujais nariais ir dėl to gaunasi blogas rezultatas.
Nori sudalyvauti šioje temoje ir parašyti savo pranešimą? Prisijungti »