Soluções para o problema "Escadinha" abaixo!
Plataforma: URI (BEECROWD)
Problema: 2782
Enunciado:
Dizemos que uma sequência de números é uma escadinha, se a diferença entre números consecutivos é sempre a mesma. Por exemplo, “2, 3, 4, 5” e “10, 7, 4” são escadinhas. Note que qualquer sequência com apenas um ou dois números também é uma escadinha! Neste problema estamos procurando escadinhas em uma sequência maior de números. Dada uma sequência de números, queremos determinar quantas escadinhas existem. Mas só estamos interessados em escadinhas tão longas quanto possível. Por isso, se uma escadinha é um pedaço de outra, consideramos somente a maior. Por exemplo, na sequência “1, 1, 1, 3, 5, 4, 8, 12” temos 4 escadinhas diferentes: “1, 1, 1”, “1, 3, 5”, “5, 4” e “4, 8, 12”.
Linguagens: C e C++
Solução:
Código em C:
#include <stdio.h> int main() { int n, escadinha[1001], v[1001], i, j = 0, dif; scanf("%i", &n); for (i = 0; i < n; i++) scanf("%i", &v[i]); if (n == 1 || n == 2) printf("1\n"); else { dif = v[1] - v[0]; escadinha[0] = 2; for (i = 1; i < n; i++) { if (v[i] - v[i-1] == dif) escadinha[j]++; else { j++; escadinha[j] = 1; } dif = v[i] - v[i-1]; } printf("%i\n", j + 1); } return 0; }
#include <iostream> #include <vector> using namespace std; int main() { int n, x, i, j = 0, dif; vector<int> v, escadinha; cin >> n; for (i = 0; i < n; i++) { cin >> x; v.push_back(x); } if (n == 1 || n == 2) cout << "1" << endl; else { dif = v[1] - v[0]; escadinha.push_back(2); for (i = 1; i < n; i++) { if (v[i] - v[i-1] == dif) escadinha[j]++; else { j++; escadinha.push_back(1); } dif = v[i] - v[i-1]; } cout << ++j << endl; } return 0; }
Nenhum comentário:
Postar um comentário