Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
2 / 2 / 2
Регистрация: 14.03.2017
Сообщений: 124

Даны 2 последовательности (А и В)

24.06.2019, 21:32. Показов 3343. Ответов 32
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Даны 2 последовательности(A и B). Мы производим действия над А последовательностью по условиям.
Если B[i]>0 то добавляем этот элемент i раз в конец последовательности A, B[i]<0 удаляем |i| элементов из конца А(если в А недостаточное количество элементов чтобы удалить, тогда просто выводим -1)
Программа выходит из цикла даже когда Math.Abs(B[i]) = A.Count. Если я ввожу "1 2 3 -1 -3 1 -1" то выводит "-1", а должно " 1 -1"
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
for (int i = 0; i < B.Count; i++)
            {
                if (B[i] > 0)
                {
                    for (int k = 0; k < B[i]; k++)
                    {
                        A.Add(B[i]);
                    }
                }
                else if (B[i] == 0)
                {
                    continue;
                }
                else if (B[i] < 0)
                {
                    for (int m = 0; m < Math.Abs(B[i]); m++)
                    {
                        if (Math.Abs(B[i]) <= A.Count)
                        {
                            A.RemoveAt(A.Count - 1);                            
                        }
                        else if (Math.Abs(B[i]) > A.Count)
                        {
                            A.Clear();
                            goto Show;
                        }
                    }
                }
            }
            Show:
            A.Add(-1);
            for (int i = 0; i < A.Count; i++)
            {
                Console.Write("{0} ", A[i]);
            }
Подскажите пожалуйста в чем проблема
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.06.2019, 21:32
Ответы с готовыми решениями:

Даны две последовательности.Верно ли, что все числа второй последовательности входят в первую.
Даны две последовательности {a}_{1},{a}_{2},...,{a}_{n} и {b}_{1},{b}_{2},...,{b}_{m} (m&lt;n). В каждой из них числа различны. Верно ли,...

Даны три числовые последовательности a, b и c. Сформировать две новые последовательности x и y в соответствии со следующим правилом
Даны три числовые последовательности a, b и c. Сформировать две новые последовательности x и y в соответствии со следующим правилом ...

Даны две последовательности. Верно ли, что все члены второй последовательности входят в первую?
Даны две последовательности a^1,a^2,...,a^n, b^1,b^2,...,b^n (m&lt;n). В каждой из них члены различны. Верно ли, что все члены второй...

32
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
24.06.2019, 22:34
Студворк — интернет-сервис помощи студентам
Кирилл2017, а что не так?метод не работает?то что в мейне, это я для проверки и демонстрации массивы прописал, это пример
0
2 / 2 / 2
Регистрация: 14.03.2017
Сообщений: 124
24.06.2019, 22:38  [ТС]
Diamante,
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
string inputString = Console.ReadLine();
            int index = inputString.IndexOf("-1");
            string arr1 = inputString.Substring(0, index);
            string arr2 = inputString.Remove(inputString.Length - 2).Substring(index + 3);
            var A = arr1.Trim().Split(' ').Select(x => int.Parse(x)).ToList();
            var B = arr2.Trim().Split(' ').Select(x => int.Parse(x)).ToList();
            
            for (int i = 0; i < B.Count; i++)
            {
                if (B[i] > 0)
                {
                    for (int k = 0; k < B[i]; k++)
                    {
                        A.Add(B[i]);
                    }
                }
                else if (B[i] == 0)
                {
                    continue;
                }
                else if (B[i] < 0)
                {
                    for (int m = 0; m < Math.Abs(B[i]); m++)
                    {
                        if (Math.Abs(B[i]) <= A.Count)
                        {
                            A.RemoveAt(A.Count - 1);                            
                        }
                        else if (Math.Abs(B[i]) > A.Count)
                        {
                            
                            goto Show;
                        }
                    }
                }
            }
            Show:
            A.Add(-1);
            for (int i = 0; i < A.Count; i++)
            {
                Console.Write("{0} ", A[i]);
            }
            
 
            Console.ReadKey();
вот весь код, теперь не работает с последовательностью "1 2 3 4 5 6 -1 -6 1 4 -3 -1 ", должно вывести "1 4 -1 ", а выводит просто "-1".
Вот полная формулировка задачи:
Даны 2 последовательности чисел, которые не содержат -1:

1. A [0], A [1], ..., A [n].

2. B [0], B [1], ..., B [м].

Измените последовательность A в соответствии с этой спецификацией. Для каждого k в 0, 1, ... м,

· Если B [k]> 0, добавьте число B [k] в конец последовательности A B [k] раз;

· Если B [k] = 0, ничего не делать;

· Если B [k] <0, удалите последний | B [k] | числа из последовательности A;

· Если B [k] <0 и последовательность A не имеет достаточного количества элементов, операции должны остановиться и вывести номер завершения -1.

Выведите элементы, оставшиеся в последовательности A после ее изменения.

Добавлено через 31 секунду
до этого не совсем правильно формулировку написал
0
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
24.06.2019, 22:43
мне не совсем понятно куда пихать самую последнюю -1, но на выходе остается не 1 4, а 1 1, исходя из условия

Добавлено через 44 секунды
либо ты сам не понял условие либо нам "переврал"
0
2 / 2 / 2
Регистрация: 14.03.2017
Сообщений: 124
24.06.2019, 22:51  [ТС]
-1 просто добавляется в конец последовательности, для обозначения что это конец последовательности.
Сейчас пошагово распишу что проходит. Вот мы ввели 1 2 3 4 5 6 -1 -6 1 4 -3 -1
А = 1 2 3 4 5 6, В = -6 1 4 -3.
идет перебор последовательности В.
1) -6 т.к. B [k] <0 то мы должны удалить | B [k] | = 6 чисел с конца А ---- пустой список
2) 1 т.к. B [k]> 0 то мы добавляем число B [k] = 1 в конец последовательности A B [k] раз(1 раз) ---- 1
3) 4 т.к. B [k]> 0 то мы добавляем число B [k] = 4 в конец последовательности A B [k] раз(4 раза) ----- 1 4 4 4 4
4) -3 т.к. B [k] <0 то мы должны удалить | B [k] | = 3 числа с конца А ----- 1 4
Итог: 1 4 -1
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16164 / 11284 / 2891
Регистрация: 21.04.2018
Сообщений: 33,170
Записей в блоге: 2
24.06.2019, 22:55
Цитата Сообщение от Кирилл2017 Посмотреть сообщение
последовательность завершается -1 и в данном случае у нас А = "1 2 3", В="-3 1"
....!? Нет слов! Одни эмоции!
То есть у Вас даны не две последовательности, а одна. В которой есть только две -1. Последовательность завершается этой -1.
А в в воде тоже такую последовательность надо получить?

Вот теперь детально.
В начале у нас исходная последовательность 1 2 3 -1 -3 1 -1 делится на две А = "1 2 3" и В="-3 1". Это Вы делаете за пределами предоставленного кода.

На первом шаге из А удаляется 3 элемента. Она становится пустой.

На втором шаге, в неё нужно добавить 1

После окончания обработки добавить в коней последовательности -1

Я правильно понял?

Если да, проверьте такой код
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
            List<int> A = new List<int>() { 1, 2, 3 };
            List<int> B = new List<int>() { -3, 1 };
            for (int i = 0; i < B.Count; i++)
            {
                if (B[i] > 0)
                {
                    for (int k = 0; k < B[i]; k++)
                        A.Add(B[i]);
                }
                //else if (B[i] == 0)
                //{
                //    continue;
                //}
               else if (B[i] < 0)
                    if (-B[i] > A.Count)
                        break;
                    A.RemoveRange(A.Count + B[i], -B[i]);
                    //   for (int m = 0; m < Math.Abs(B[i]); m++)
                    //    {
                    //        if (Math.Abs(B[i]) <= A.Count)
                    //        {
                    //            A.RemoveAt(A.Count - 1);
                    //        }
                    //        //else if (Math.Abs(B[i]) > A.Count)
                    //        //{
                    //        //    A.Clear();
                    //        //    goto Show;
                    //        //    break;
                    //        //}
                    //    }
                }
            }
            //    Show:
            A.Add(-1);
            Console.WriteLine(string.Join(", ", A));
            //for (int i = 0; i < A.Count; i++)
            //{
            //    Console.Write("{0} ", A[i]);
            //}
1
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
24.06.2019, 22:57
как ты первый раз описал, такое решение и получил
если теперь точное задание, то
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Management;
 
 
namespace ConsoleApp1
{
    class Program
    {
        static IEnumerable<int> Method(List<int> a, List<int> b)
        {
            var stk = new Stack<int>(a);
            for (int i = 0; i < b.Count; i++)
            {
                if (b[i] > 0)
                    for (int j = 0; j <b[i]; j++)
                    {
                        stk.Push(b[i]);
                    }
                if (b[i] < 0)
                    for (int j = 0; j < -b[i]; j++)
                    {
                        if (stk.Count == 0) return new List<int>() { -1 };
                        stk.Pop();
                    }
            }
            return stk.Reverse();
        }
        static void Main(string[] args)
        {
            string inputString = Console.ReadLine();
            int index = inputString.IndexOf("-1");
            string arr1 = inputString.Substring(0, index);
            string arr2 = inputString.Remove(inputString.Length - 2).Substring(index + 3);
            var a = arr1.Trim().Split(' ').Select(x => int.Parse(x)).ToList();
            var b = arr2.Trim().Split(' ').Select(x => int.Parse(x)).ToList();
            var result = Method(a, b);
            Console.WriteLine(string.Join(" ",result));
        }
    }
}
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16164 / 11284 / 2891
Регистрация: 21.04.2018
Сообщений: 33,170
Записей в блоге: 2
24.06.2019, 23:02
Цитата Сообщение от Кирилл2017 Посмотреть сообщение
Сейчас пошагово распишу что проходит. Вот мы ввели 1 2 3 4 5 6 -1 -6 1 4 -3 -1
А = 1 2 3 4 5 6, В = -6 1 4 -3.
..........
Итог: 1 4 -1
Для этого примера тоже даёт верный ответ
0
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
24.06.2019, 23:03
я так и не понял на кой к ответу добавлять -1?
0
2 / 2 / 2
Регистрация: 14.03.2017
Сообщений: 124
24.06.2019, 23:06  [ТС]
Элд Хасп, да, правильно, но теперь оно сломалось в другом месте. Если по правилу
Если B [k] <0 и последовательность A не имеет достаточного количества элементов, операции должны остановиться и вывести номер завершения -1.
и мы вводим последовательность "1 2 3 4 5 6 -1 -7 1 4 -3 -1 ", должно выводить "-1" т.к. |-7| > 6 (количество элементов), а теперь выводит "1 2 3 4 5 6 -1"

Добавлено через 53 секунды
Diamante, я сам не знаю, в задании так сказано, но как по мне это бессмысленно, но задание есть задание, его не переделать
0
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
24.06.2019, 23:14
Лучший ответ Сообщение было отмечено Кирилл2017 как решение

Решение

проверяй
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Management;
 
 
namespace ConsoleApp1
{
    class Program
    {
        static IEnumerable<int> Method(List<int> a, List<int> b)
        {
            var stk = new Stack<int>(a);
            for (int i = 0; i < b.Count; i++)
            {
                if (b[i] > 0)
                    for (int j = 0; j < b[i]; j++)
                    {
                        stk.Push(b[i]);
                    }
                if (b[i] < 0)
                    for (int j = 0; j < -b[i]; j++)
                    {
                        if (stk.Count == 0) return new List<int>() { -1 };
                        stk.Pop();
                    }
            }
            stk.Push(-1);
            return stk.Reverse();
        }
        static void Main(string[] args)
        {
            string inputString = Console.ReadLine();
            int index = inputString.IndexOf("-1");
            string arr1 = inputString.Substring(0, index);
            string arr2 = inputString.Remove(inputString.Length - 2).Substring(index + 3);
            var a = arr1.Trim().Split(' ').Select(x => int.Parse(x)).ToList();
            var b = arr2.Trim().Split(' ').Select(x => int.Parse(x)).ToList();
            var result = Method(a, b);
            Console.WriteLine(string.Join(" ", result));
        }
    }
}
1
2 / 2 / 2
Регистрация: 14.03.2017
Сообщений: 124
24.06.2019, 23:20  [ТС]
Diamante,огромное Вам спасибо!!! все работает!

Добавлено через 40 секунд
и спасибо всем тем кто мне помогал, я очень благодарен Вам всем
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16164 / 11284 / 2891
Регистрация: 21.04.2018
Сообщений: 33,170
Записей в блоге: 2
24.06.2019, 23:43
Цитата Сообщение от Кирилл2017 Посмотреть сообщение
но теперь оно сломалось в другом месте. Если по правилу
Если B [k] <0 и последовательность A не имеет достаточного количества элементов, операции должны остановиться и вывести номер завершения -1.
и мы вводим последовательность "1 2 3 4 5 6 -1 -7 1 4 -3 -1 ", должно выводить "-1" т.к. |-7| > 6 (количество элементов), а теперь выводит "1 2 3 4 5 6 -1"
Я у Вас специально уточнял этот момент. Вы ответили по другому. Так же такого условия в задаче нет.

У Вас условие Если B [k] <0 и последовательность A не имеет достаточного количества элементов, операции должны остановиться и вывести номер завершения -1.
А то что сейчас Вы пишите это Если B [k] <0 и последовательность A не имеет достаточного количества элементов, то ОЧИСТИТЬ ПОСЛЕДОВАТЕЛЬНОСТЬ и вывести номер завершения -1

Согласитесь - это иная постановка задачи.
0
2 / 2 / 2
Регистрация: 14.03.2017
Сообщений: 124
24.06.2019, 23:55  [ТС]
Элд Хасп, да, тут я согласен что это полностью моя вина что я не правильно объяснил задачу, прошу принять мои извинения
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.06.2019, 23:55

Даны две последовательности целых чисел. Удалить из первой последовательности все элементы, встречающиеся во второй
Решить с помощью vector. Даны две последовательности целых чисел. Удалить из первой последовательности все элементы, встречающиеся во...

Даны последовательности a1
Даны последовательности a1,...,an и b1,...,bn . Постpоить последовательность c1,...,ck из всех членов последовательности b1,...,bn ,...

Даны 2 последовательности
Даны 2 последовательности(A и B). Мы производим действия над А последовательностью по условиям. Если B&gt;0 то добавляем этот элемент i...

Даны последовательности
Даны последовательности a1...an и b1....bm,В последовательности a1...an и b1....bm все члены следующие за членом с наибольшим значением(за...

Даны две последовательности
Даны две последовательности а1, а2,…,аn и b1,b2,…,bn. Проверить, правда ли, что все аi &gt; bi. Решите с процедурами или функциями,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
33
Ответ Создать тему
Новые блоги и статьи
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов. Логика кажется понятной: 1. Находим ключевые слова. 2. Добавляем их на. . .
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302 Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru