153 / 153
Nov 2022

Jeden widzę. Problem z czytaniem ze zrozumieniem.

Jestem instruktorem żeglarstwa [między innymi] i za stary jestem, aby się bać byle czego :wink:

10 months later

Dzień dobry wieczór,
Wyjątkowo nie mam problemu z kodem a z zadaniem:
Średnia z 5ciu podanych liczb (4 1 2 3 4) to 2.8 więc najbliżej średniej jest liczba 3, a w zadaniu jest podane że powinna wyjść 2
Dlaczego tak a nie inaczej (widziałem że mowa o pierwszym elemencie z listy ale w takim razie gdzie jaka jest granica błędu?)
A, i jeszcze mój kod: https://ideone.com/yDU25t
Pozdrawiam!

Źle interpretujesz linijki. Pierwsza liczba w każdej linii podaje liczbę liczb :wink: z jakich liczysz średnią. Czyli powinno być 2.5 a nie 2.8

Eeeech, wykładasz tak od razu kawa na ławę… Pamiętam moje problemy z tym zadaniem. Ni w ząb nie mogłem zrozumieć przykładów testowych. Przeczytałem wszystkie komentarze na forum dotyczące tego zadania, przeczytałem kilka razy treść zadania, ale w sumie co tu wiele czytać - średnia to średnia, zadanie proste tylko autorowi coś się pomyliło… Ale zacząłem jednak myśleć, przecież są ludzie, którzy rozwiązali to zadanie. Czy im też się pomyliło? Jeszcze raz przeczytałem wszystkie komentarze i wreszcie PRZECZYTAŁEM treść zadania. Gdy ją zrozumiałem to dalej już było banalne. Fakt, że zajęło mi to trochę czasu, bo kilka razy je sobie odpuszczałem i brałem się za inne. Nie wiem czy dobrze jest tłumaczyć wszystko tak literalnie w sytuacji, gdy zadanie jest NAPRAWDĘ DOBRZE opisane przez autora. W końcu w programowaniu chodzi nie tylko o umiejętność napisania kodu, ale i o zrozumienie problemu. W każdym razie tak mi się wydaje… :slight_smile: Żeby było jasne, ja się Ciebie nie czepiam tylko tak sobie rozmyślam

Hehe w sumie się zgadzam w 100%. Czasem mnie najdzie napisać za dużo, nie wiem dlaczego.

Wiem, też mi się zdarzało :slight_smile: Z drugiej strony często taki absolutny początkujący, jak dojdzie do ściany to nie próbuje się wspiąć tylko się zniechęca i odpuszcza. Pytanie czy chodzi tu wyłącznie o pisanie kodów czy też o rozwiązywanie problemów.

2 months later

Witam nie mam pojęcia dlaczego ten kod mi nie przechodzi może chciałby ktoś rzucić okiem ?

#include

using namespace std;

int main() {
int n;
cin >> n;
double srednia;
double suma = 0;
int index = 0;

for (int i = 0; i < n; ++i) {
    int m;
    cin >> m;
    int t[m];

    for (int j = 0; j < m; ++j) {
        cin >> t[j];
        suma += t[j];


    }
    srednia = suma / m;
    double najblizszywartosc = abs(srednia - t[0]);
    for (int j = 0; j < m; ++j) {
        if (najblizszywartosc > abs(srednia - t[j])) {
            najblizszywartosc = abs(srednia - t[j]);
            index = j;
        }


    }
    cout << t[index] << endl;
    suma = 0;


}


return 0;

}

Tak na bardzo szybko…
Źle deklarujesz tablicę, może coś jeszcze ale nie mam czasu

4 months later

witam
spoj twierdzi że kod podaję błędną odpowiedź i nie rozumiem czemu ponieważ u mnie jak i na ideone(mój kod na ideone) wszystko działa dobrze jestem początkujący i nie znam się na tym zbyt dobrze, może robię po prostu coś w zły sposób ://

Blockquote
#include

using namespace std;

float ab(float x)
{
if (x < 0) x = x * (-1);
return x;
}

int num_var;
int var[100];
float diff[100];
float avg, m;
int closest = 1;
int ile;

int main()
{
cin >> ile;

for (int i = 0; i < ile; i++)
{
	cin >> num_var;
	avg = 0;
	for (int i = 1; i <= num_var; i++)
	{
		cin >> var[i];
		avg += var[i];
	}
	avg /= num_var;
	for (int i = 0; i <= num_var; i++)		diff[i] = ab(avg + (var[i] * (-1)));
	m = diff[1];
	for (int i = 1; i <= num_var; i++)
	{
		if (m > diff[i])
		{
			m = diff[i];
			closest = i;
		}
	}
	cout << var[closest] << endl;
}
return 0;

}

1 month later

Witam,
Potrzebuję pomocy z tym zadaniem.

Wydaje się, że działa prawidłowo. Można prosić o jakąś wskazówkę co jest nie tak.

Po pierwsze, który kod jest łatwiejszy w debuggu: mój czy Twój?

#include <iostream>
#include <cmath>

//np. autor mogl pominac jakies zero w specyfikacji wejscia, ...
#define ZAPAS_DLA_PEWNOSCI 10'000

//ale pamietaj, ze tak wolno tylko na spoju i w realu jednak std::cin, ...
using namespace std;

int main()
{
    int t, n, answer;
    int *arr;
    double average;
    
    cin >> t;
    
    while(t--) {
    	average = 0.0;
    	
    	cin >> n;
    	
    	arr = new int [n + ZAPAS_DLA_PEWNOSCI];
    	
    	for(int i = 0; i < n; ++i) {
    		cin >> arr[i];
    		average += arr[i];
    	}
    	
    	average /= n;
    	answer = arr[0];
    	
    	for(int i = 1; i < n; ++i) {
    		if(abs(arr[i - 1] - average) > abs(arr[i] - average))
    			answer = arr[i];
    	}
    	
    	cout << answer << endl;
    	
    	delete[] arr;
    	
    }
    
    return 0;
}

Po drugie:

1
4 2 3 0 4

zaczynam pisać i tak po prostu mi jest łatwiej. Może z czasem będę pisać lepiej/czytelniej. Poprawiłem czeski błąd. ale dalej źle…

1 year later

Witam,
prosiłbym o pomoc co tu jest źle. W VS wychodzi dobrze odpowiedź, ideone również nie wywala błędów a SPOJowi się nie podoba odpowiedź… :frowning:
Zadanko Średnia arytmetyczna [PP0603A] w C#

Liczysz średnią z liczby liczb w linii i pomijasz ostatnią liczbę w linii.

for (int j = 0; j < n; j++) 
{
    tab[j] = int.Parse(nTbl[j + 1]);
    suma += tab[j]; 
}
4 months later

Witam , kiedy wrzucilem kod pod c++(g++ 4.3.2) wywalalo blad jednak jak zmienilem na
c++(gcc 8.3) wszystko cacy , problem zostal zaakceptowany, czy bylby ktos tak mily i wytlumaczyl mi te zaleznosc.
link do kodu.

Kod

cin >>n;
int liczba[n];

nie jest poprawnym kodem C++ (jest niezgodny z jego standardem). Nie można ustawiać rozmiaru tablicy podczas działania programu, tablica ma stałą szerokość od samego początku. Chcąc zmieniać/ustalać jej rozmiar podczas działania programu należy skorzystać z tablic dynamicznych lub wektorów. ALE większość kompilatorów na to pozwala z różnym efektem (czasem się wywali).

W Twoim wypadku można stworzyć tablicę 100 elementową

int liczba[100]

i znając n wypełniać ją tylko do odpowiedniego momentu.

samo to nie pomaga w tym przypadku, chociaż mnie to też irytuje :slight_smile:

Widocznie drugi kompilator bardziej łaskawy. Zobacz do czego służy funkcja abs z stdlib i czy na pewno używasz jej zgodnie z przeznaczeniem