alex13izmailov
?>

С++ Напишите программу, которая по полному списку номеров бракованных изделий, выдаст этот список в сокращенном виде.В фирме, выпускающей компьютерные комплектующие, все изделия получают последовательные номера от 1 до N. Каждое изделие после его изготовления поступает в отдел контроля качества, где оно проверяется, и либо уходит в продажу, либо заносится в список бракованных изделий и списывается. К сожалению, список бракованных изделий иногда оказывается чересчур длинным. Тогда для его сокращения подряд идущие числа заменяются интервалом: через тире указываются номера первого и последнего изделия интервала. Например, вместо 1, 3, 4, 5, 6, 7, 8, 10, 12, 16, 17, 20, 21, 22, 23, 24Записывается 1, 3-8, 10, 12, 16-17, 20-24Входные данные. Вводится сначала число N - общее количество изделий. Затем число M - количество изделий, оказавшихся бракованными. Далее вводятся в возрастающем порядке номера бракованных изделий.Выходные данные. Выведите в одной строке список номеров бракованных изделий в сокращенном виде. Интервалы должны разделяться запятой. В строке не должно быть пробелов.Ограничения 1≤M≤N≤1000000.ПримерВход Выход10 51 3 5 7 9 1, 3, 5, 7, 940 161 3 4 5 6 7 8 10 12 16 17 20 21 22 23 24 1, 3-8, 10, 12, 16-17, 20-24

Информатика

Ответы

Мария Кашихина

#include <iostream>

using namespace std;

int main()

{

int num;

cin >> num >> num;

int* ans = new int[num];

for (int jjj = 0; jjj < num; jjj++) cin>> ans[jjj];

for (int jjj = 1; jjj < num; jjj++) {

 if (ans[jjj - 1] != ans[jjj] - 1) cout << ans[jjj - 1] << ",";

 else {

  cout << ans[jjj - 1];

  int kkk = jjj;

  for (kkk; kkk < num; kkk++)

                         if (ans[kkk - 1] != ans[kkk] - 1) break;

  if (kkk - jjj > 1) cout << "-" << ans[kkk - 1];

  else cout << "," << ans[kkk - 1];

             jjj = kkk;

  if (num - jjj) cout << ",";

 }

 if (num - jjj == 1) cout << ans[jjj];

}

}

dianakryukova00
Вот на С++:

#include <iostream>
#include <sstream>
#include <fstream>
#include <string>
#include <vector>
#include <deque>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <algorithm>
#include <functional>
#include <cstring>
#include <utility>
#include <bitset>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <cstdio>
#include <climits>typedef unsigned long long ulol;
typedef long double ld;
typedef long long lol;
typedef long int  li;#define mp          make_pair
#define F           first
#define S           second
#define sqr(a)      ( (a) * (a) )
#define pb          push_back
#define INF         999999999
#define ret(a)      cout << endl; system("pause"); return(a)
//#define ret(a)      return(a)using namespace std;int main()
{
    ld x;
    cin >> x;
    x = ( 8 / sqrt( x ) ) + sqrt(x);
    cout << x;
    ret(0);
}
Yuliya Aleksandr686
{неэффективный алгоритм}

const
 k = 100;

type
 maze = array [1..k, 1..k] of integer;
 var
 l : maze;
 n, m: integer;
 i, j: integer;
 c: char;
 t: text;
 w: integer;
 x0, y0: integer;
 x1, y1: integer;

procedure ways(a,b,r:integer);
begin
 if (w = 0) or (r < w) then {нет смысла идти дальше, если текущий путь уже превосходит найденный}
 if (l[a,b] <> -2) then
 if (r < l[a,b]) or (l[a,b] = -1) then {нет смысла идти, если текущая клетка уже была достигнута за меньшее число шагов}
   begin
   l[a,b] := r;
   if (a = x1) and (b = y1) then
     w := r
   else
     begin
     if a <> 1 then ways(a - 1, b, r + 1);
     if b <> 1 then ways(a, b - 1, r + 1);
     if a <> n then ways(a + 1, b, r + 1);
     if b <> m then ways(a, b + 1, r + 1);
     end
   end;
end; 
begin
 assign(t, 'input.txt');
 reset(t);
 w := 0;
 readln(t, n, m);
 readln(t, x0, y0);
 readln(t, x1, y1);
 for i := 1 to n do
   begin
   for j := 1 to m do
     begin
     read(t, c);
     case c of
       '.' : l[i,j] := -1; {будем считать, что если клетка отмечена как -1, то путь к ней еще не найден}
       'X' : l[i,j] := -2; {-2, если клетка непроходима}
       end;
     end;
   readln(t)
   end;
 close(t);
 if (l[x0,y0] <> -2) and (l[x1,y1] <> -2) then
   begin
   l[x0,y0] := 1; {просто трюк, чтобы пройти проверку на (r < l[x0,y0])}
     ways(x0, y0, 0);
   end
 else
  l[x1,y1] := -1;
 writeln(l[x1,y1])
end.

Ответить на вопрос

Поделитесь своими знаниями, ответьте на вопрос:

С++ Напишите программу, которая по полному списку номеров бракованных изделий, выдаст этот список в сокращенном виде.В фирме, выпускающей компьютерные комплектующие, все изделия получают последовательные номера от 1 до N. Каждое изделие после его изготовления поступает в отдел контроля качества, где оно проверяется, и либо уходит в продажу, либо заносится в список бракованных изделий и списывается. К сожалению, список бракованных изделий иногда оказывается чересчур длинным. Тогда для его сокращения подряд идущие числа заменяются интервалом: через тире указываются номера первого и последнего изделия интервала. Например, вместо 1, 3, 4, 5, 6, 7, 8, 10, 12, 16, 17, 20, 21, 22, 23, 24Записывается 1, 3-8, 10, 12, 16-17, 20-24Входные данные. Вводится сначала число N - общее количество изделий. Затем число M - количество изделий, оказавшихся бракованными. Далее вводятся в возрастающем порядке номера бракованных изделий.Выходные данные. Выведите в одной строке список номеров бракованных изделий в сокращенном виде. Интервалы должны разделяться запятой. В строке не должно быть пробелов.Ограничения 1≤M≤N≤1000000.ПримерВход Выход10 51 3 5 7 9 1, 3, 5, 7, 940 161 3 4 5 6 7 8 10 12 16 17 20 21 22 23 24 1, 3-8, 10, 12, 16-17, 20-24
Ваше имя (никнейм)*
Email*
Комментарий*

Популярные вопросы в разделе

natalia-shelkovich
KIRILLSHURYGIN98
zsa100
Reutskii-Kirilovskii1625
SaraevaTretyakov1941
strelnikov-aa
Araevich
kirill81
Виктор Попова
annashaykhattarova1
ambstroy
Татьяна Гришаевич
VASILEVNA
Bogataya Vladimir318
qwe54344