141 / 153
Sep 2020
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