Rysowanie piramidy z liczb z podanego przedziału

0

Potrzebuje pomocy z zadaniem. Nie chodzi o wypisanie kodu, tylko bardziej o merytoryczne wyjaśnienie co zrobić by kod zadziałał.

Polecenie:

Napisz program, który wczytuje ciąg złożony z N liczb całkowitych (2 ≤ N ≤ 20), a następnie tworzy przy jego użyciu piramidę z liczb, wpisując je w kolejnych wierszach. Na przykład po wczytaniu ciągu

1 2 4 

utworzona piramida powinna wyglądać tak:

1 

2 4 

1 2 4 

1 2 4 1 

2 4 1 2 4 

1 2 4 1 2 4 

itd.

Twój program powinien obliczyć i wypisać sumę liczb znajdujących się w wierszu o zadanym numerze.

Dane wejściowe;

Pierwszy wiersz danych wejściowych zawiera liczbę naturalną N. W drugim wierszu znajduje się N liczb całkowitych z zakresu od −1000 do 1000. Liczby w wierszu oddzielone są pojedynczymi odstępami. Kolejny wiersz zawiera liczbę naturalną z zakresu od 1 do 10000 oznaczającą numer wiersza, którego sumę należy obliczyć.

Wynik programu;

Twój program powinien wypisać wiersz tekstu zawierający odpowiednią sumę.

Przykład;

Dla danych wejściowych:

3 

1 2 4 

5 

Twój program powinien wypisać:

13 

(W wierszu 5 są liczby: 2 4 1 2 4)

2
Marek Kowalczyk napisał(a):

tylko bardziej o merytoryczne wyjaśnienie co zrobić by kod zadziałał.

Jak to sobie wyobrażasz?

Pewnie go trzeba napisać.
Aby napisać trzeba znać zakiś zakres jezyka programowania.

Każda, nawet najdłuższa podróż zaczyna się od pierwszego kroku

przyjąć dane od użytkownika
zrobić pętlę
zrobic przedmiotowe drukowanie
itd ...

Sakramentalne pytanie: co już masz i z czym masz problem

2

W zasadzie rozpocząć musisz od kartki papieru i długopisu.
Zapisz tą piramidę w jednym wierszu dzieląc kolejne wiersze jakimś znaczkiem np |
1|2 4|1 2 4|1 2 4 1|2 4 1 2 4|1 2 4 1 2 4
Np z przykładu wiersz X=5
Oblicz ile masz liczb w tym wierszu przed wierszem X - czyli wyprowadź formułę matematyczną f(X)
Dalej z górki, załóżmy że masz C liczb przed wierszem X oraz długość ciągu wynosi L
To masz C/L pełnych sum całego ciągu L plus jeden raz pierwsze C%L liczb z L

0
ZrobieDobrze napisał(a):
Marek Kowalczyk napisał(a):

tylko bardziej o merytoryczne wyjaśnienie co zrobić by kod zadziałał.

Jak to sobie wyobrażasz?

Pewnie go trzeba napisać.
Aby napisać trzeba znać zakiś zakres jezyka programowania.

Każda, nawet najdłuższa podróż zaczyna się od pierwszego kroku

przyjąć dane od użytkownika
zrobić pętlę
zrobic przedmiotowe drukowanie
itd ...

Sakramentalne pytanie: co już masz i z czym masz problem

były funkcję, pętl, funkcje logiczne, tablice jedno i dwuwymiarowe. Jeżeli chodzi o problem, to samą sumę bez problemu mogę policzyć, ale nie bardzo rozumiem na jakiej zasadzie działa i jak zrobić tą piramidę i w jaki sposób wybrać który jej wiersz liczyć

0
#include <iostream>
#include <vector>

using namespace std;

int sumLine(const vector<int>& pyramid, int line)
{
    if (line > pyramid.size())
        return 0;

    int sum = 0;

    for (int i = 0; i < line; i++)
        sum += pyramid[i];

    return sum;
}

int main()
{
    int n;
    cin >> n;

    vector<int> pyramid(n);
    for (int i = 0; i < n; i++)
        cin >> pyramid[i];
        
    int line;
    cin >> line;

    cout << sumLine(pyramid, line) << endl;

    return 0;
}

0

@tabsy123, i jakim bokiem to przylega k zadaniu?

Cytuje post OP:

Dla danych wejściowych:
3
1 2 4
5

Twój program powinien wypisać:
13

0
tabsy123 skomentował(a):

nie rozumiem pytania

@tabsy123:
Twój kod nie przechodzi testów. Nawet te trywialne dane testowe dają zły wynik: https://godbolt.org/z/dYqPb51hE

1
#include <iostream>
#include <iterator>
#include <vector>
using namespace std;

int main() // 3 1 2 4 5
{
	istream_iterator<size_t> iin(cin);
	size_t size=*(iin++);
	vector<size_t> tb(size);	
	for(size_t i=0;i<size;++i) tb[i]=*(iin++);
	size_t row=*iin;
	size_t stop=(row*(row+1))>>1,stopN=stop/size,stopR=stop-stopN*size;
	size_t start=stop-row,startN=start/size,startR=start-startN*size;
	size_t sum=0;
	for(size_t i=0;i<size;++i) sum+=(stopN-startN+(i<stopR)-(i<startR))*tb[i];
	cout<<sum<<endl;	
	return 0;
}
1
MarekR22 napisał(a):
tabsy123 skomentował(a):

nie rozumiem pytania

@tabsy123:
Twój kod nie przechodzi testów. Nawet te trywialne dane testowe dają zły wynik: https://godbolt.org/z/dYqPb51hE

A to przechodzi testy: https://godbolt.org/z/6bq345fz5

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