ematematikas Registruotis Ieškoti

Rasti mažiausią atstumą nuo namo, kuriame Petriukas gyvena, iki to kurį jis gali nusipirkti

Informatika   Peržiūrų skaičius (99)

Sveiki, užduotis tokia:
Kaime viso yra n namų, sustatytų tiesia linija ir sunumeruotų iš kairės į dešinę: namas 1, namas 2, ..., namas n. Kaimas taip pat gerai struktūrizuotas: tarp namo i ir namo i + 1 (1 ≤ i <n) yra lygiai 10 metrų. Šiame kaime kai kurie namai yra užimti, o kai kurie - ne. Jums bus suteikta n sveikųjų skaičių a1, a2, ..., tai reiškia namelių prieinamumą ir kainas. Jei namas i yra užimtas ir todėl jo negalima nusipirkti, tada ai lygus 0. Priešingu atveju namą galima nusipirkti, ai - tai pinigai, kuriuos reikia sumokėti doleriais.
Petriukas gyvena m-ajame kaimo namelyje, bei turi sutaupęs k dolerių. Padėkite Petriukui išsirinkti artimiausią įperkamą namą.
Mano kodas toks:
#include <iostream>
#include <fstream>
using namespace std;
void naujas(int n,int m,int k,int a[100],int b[100],int &kiek,int &skirt);
int Atstumas(int m, int n, int k, int a[]);
int main()
{
    int n,m,k,a[100],b[100],kiek=0,skirt;
    cin>>n>>m>>k;
    for(int i=0;i<n;i++)
    cin>>a[i];
    naujas(n,m,k,a,b,kiek,skirt);
    int atstumas = Atstumas(m, n, k, a);
    cout << atstumas << endl;


    return 0;
}
void naujas(int n,int m,int k,int a[100],int b[100],int &kiek,int &skirt)
{
  skirt=1001;
  kiek=0;
  for(int i=0;i<n;i++)
  if(a[i]!=0 && a[i]<=k){
  b[kiek]=i;
  kiek++;
}

}
int Atstumas(int m, int n, int k, int a[])
{

    int atstumas;


    int atstumas1 = 0;
    for (int i = 0; i < n; i ++)
    {
        atstumas1 +=10;
        if (a[i] <= k && a[i]!= 0)
        {
            atstumas = atstumas1;
            break;
        }

    }
    int atstumas2 = 0;
    for (int i = n; i > 0; i --)
    {
        atstumas2 += 10;
        if (a[i] <= k && a[i] != 0 && atstumas2 < atstumas1)
        {  atstumas = atstumas2;
            break;
        }


    }
   
    return atstumas;
}

Nepraeina testo:
10 5 100
1 0 1 0 0 0 0 0 1 1
Gal galite padėti?

0

    for (int i = 1; i<=n; i++){
        if (a[m-1+i] != 0 && a[m-1+i] <= k && m+i-1 >= 0 && m+i-1 <n){
            atstumas = i*10;
            break;
        }
        else if (a[m-1-i] != 0 && a[m-1-i] <= k && m-i-1 >=0 && m-i-1 <n){
            atstumas = i*10;
            break;
        }
    }


Kiek suprantu, tai gali tiesiog taip daryti.
i yra per kiek namu eini i desine arba kaire, if'e tikrini ar namas parduodamas ir ar gali nama ipirkti, taip pat ar toks namas egzistuoja, tas -1 reikalingas, nes masyve skaiciai prasideda nuo 0, o namu numeriai nuo 1.

Tavo programoje klaida tame, kad tu tikrini is pradziu nuo gatves priekio, o tada pabaigos, o tau reikia surasti artimiausia iperkama nama nuo Petriuko namo, o ne nuo gatves pradzios ar pabaigos.

Paskutinį kartą atnaujinta 2020-11-14

0

Labai ačiū! Pavyko

0

Norėdami rašyti žinutes privalote prisijungti!