Zliczanie wystąpień zadanie z polski spoj

0

Witam podjąłem się zadania <http:// http://pl.spoj.com/problems/KC004/> zrobiłem je w ten sposób




#include <iostream>    //s-szukana liczba;   d-dlugosc ciagu;   c-ciag;  w-wystapeienie;
using namespace std;

int main()
{
    int ile=4;
    while(ile--)
    {
        int s,d,w=0;
        cin>>s;
        cin>>d;
        int *c=new int [d];
        for(int i=0;i<d;i++)
        {
            cin>>c[i];
        }

        for(int i=0;i<d;i++)
        {
            if(s==c[i])
            {
                w=w+1;
            }
        }
        cout<<w;
        delete [] c;

   }
}

 

lecz niestety wyświetla mi błąd kompilacji mimo iż program działa prawidłowo. Co powinienem zmienić ?

1

Dlaczego zakładasz, że będą 4 zestawy danych skoro w poleceniu masz napisane: Na wejście programu podana zostanie pewna nieokreślona liczba zestawów danych.?

3

//s-szukana liczba; d-dlugosc ciagu; c-ciag; w-wystapeienie;
:D
To nie lepiej już nazwać tak te zmienne?

0

Możesz wytłumaczyć zdanie

lecz niestety wyświetla mi błąd kompilacji mimo iż program działa prawidłowo

Jakim cudem po błędzie kompilacji program działa?

3
#include <iostream>
using namespace std;

int main() {
	int pattern, series_size;
	while(cin >> pattern >> series_size) {
		int occurrences = 0;
		while(series_size --> 0) {
			int num;
			cin >> num;
			if(num == pattern) {
				occurrences += 1;
			}
		}
		cout << occurrences << '\n';
	}
	return 0;
}

czas: 0:10

z ios_base::sync_with_stdio(false);: czas 0:03

#include <iostream>
#include <sstream>
#include <iterator>
#include <algorithm>
using std::cout;

#define CHEAT_INPUT \
	std::ios_base::sync_with_stdio(false); \
	std::stringstream cin; \
	std::copy(std::istreambuf_iterator<char>(std::cin), {}, std::ostreambuf_iterator<char> (cin)) \
	

int main() {
	CHEAT_INPUT;
	int pattern, series_size;
	while(cin >> pattern >> series_size) {
		int occurrences = 0;
		while(series_size --> 0) {
			int num;
			cin >> num;
			if(num == pattern) {
				occurrences += 1;
			}
		}
		cout << occurrences << '\n';
	}
	return 0;
}

czas: 0:02

#include <iostream>
#include <sstream>
#include <iterator>
#include <algorithm>
#include <vector>
using namespace std;

void cheat_input() {
	ios_base::sync_with_stdio(false);
}

vector<int> read_input_data() {
	return {
		istream_iterator<int>(cin), {}
	};
}

template<typename It>
int process(It &it) {
	int pattern     = *(it++);
	int series_size = *(it++);
	int occurences  = 0;
	
	while(series_size --> 0) {
		int num = *(it++);
		if(pattern == num) {
			occurences += 1;
		}
	}
	
	return occurences;
}

int main() {
	cheat_input();
	auto data = read_input_data();
	auto it = begin(data);
	while(it != end(data)) {
		cout << process(it) << '\n';
	}
	return 0;
}

czas: 0:03, więcej nie chce mi się tego męczyć.

  • Notka: używając indeksów zamiast iteratorów czas jest gorszy (0:04)
#include <iostream>
#include <sstream>
#include <iterator>
#include <algorithm>
#include <vector>
using namespace std;

void cheat_input() {
	ios_base::sync_with_stdio(false);
}

vector<int> read_input_data() {
	return {
		istream_iterator<int>(cin), {}
	};
}

template<typename Cont>
int process(Cont const &cont, size_t &pointer) {
	int pattern     = cont[pointer++];
	int series_size = cont[pointer++];
	int occurences  = 0;
	
	while(series_size --> 0) {
		int num = cont[pointer++];
		if(pattern == num) {
			occurences += 1;
		}
	}
	
	return occurences;
}

int main() {
	cheat_input();
	auto data = read_input_data();
	size_t pointer = 0u;
	while(pointer < data.size()) {
		cout << process(data, pointer) << '\n';
	}
	return 0;
}
0
#include <iostream>
using namespace std;
int szukanaliczba,dlugoscciagu;
int main()
{

    while(cin>>szukanaliczba>>dlugoscciagu)
    {
     int wystapienie=0;

        int *ciag=new int [dlugoscciagu];
        for(int i=0;i<dlugoscciagu;i++)
        {
            cin>>ciag[i];
        }

        for(int i=0;i<dlugoscciagu;i++)
        {
            if(szukanaliczba==ciag[i])
            {
                wystapienie=wystapienie+1;
            }
        }
        cout<<wystapienie;
        delete [] ciag;


   }
}

Na podstawie waszych odp poprawiłem w ten sposób lecz nadal coś jest nie tak komunikat:Blędna odpowiedź.

edit ,Jednak działa wystarczyło dodać znak nowej lini :) Dziękuje za pomoc wszystkim.

1
  1. Pamiętaj, ze każda odpowiedź ma być w nowej linii - u ciebie nie jest.
  2. Po co Ci tablica?

1 użytkowników online, w tym zalogowanych: 0, gości: 1