Регистрация не е нужна, освен при създаване на тема в "Задача на седмицата".

Масив? C#

Масив? C#

Мнениеот Гост » 02 Ное 2022, 18:03

received_551951743597582_edit_46046347071098.jpg
received_551951743597582_edit_46046347071098.jpg (47.76 KiB) Прегледано 677 пъти
Гост
 

Re: Масив? C#

Мнениеот Sup3rlum » 02 Ное 2022, 19:43

Това условие е глупаво, индексите започват от 0 => няма как да се провери за кратност първия елемент.

Ето ти играчка:
Код: Избери целия код
int total = 0, num = 0; var B = new List<int>() { 0, 0 }.Concat(A).Where((x, i) => i < 2 ? true : x % (i - 1) == 0).Where(x => { total += x; num++; return true; }).ToList().Select((x, i) => { if (i == 0) { return total; } else if (i == 1) { return num - 2; } return x; }).Where((x, i) => { Console.Write($"{x}{(i < 2 ? '\n' : ' ')}"); return true; }).ToList().Skip(2).ToList();
Sup3rlum
Фен на форума
 
Мнения: 247
Регистриран на: 19 Фев 2019, 02:08
Рейтинг: 347

Re: Масив? C#

Мнениеот ammornil » 06 Ное 2022, 17:18

Ето от мен едно по-старомодно решение. Моля да извините факта, че нямам кирилизация в конзолата, затова всички етикети са на английски език.

п.с. Както е посочил колегата по-горе, следва да се уточни че се търсят елементи кратни на бройния, а не на програмния индекс, на масива.
Следва да се отбележи, че вторият масив ще има винаги поне един елемент, защото елемтът с броен номер 1 от изначалния масив винаги ще се копира в новия масив.

Код: Избери целия код
using System;

namespace Masivi
{
    internal class Program
    {
        static void Main(string[] args)
        {
            //  декларира променливи
            int[] masA = new int[20];   // основен масив
            int[] masB = new int[20];   // производен масив
            int sum = 0;                    // сбор от елементите със стойности кратни на индексите им
            int cnt = 0;                    // брой на елементите със стойности кратни на индексите им

            Random rand = new Random();
 
            int mLength = rand.Next() % 19;     //избира произволен брой елементи за инициализиране
            if (mLength == 0)
            {
                mLength = 2;
            }

            Console.Write("Array A:");
            for (int i = 0; i < mLength; i++)   //инициализира и отпечатва елементи със случайни стойности
            {
                masA[i] = (int) (rand.NextDouble() * 200);  // задава случайна стойност
                Console.Write("\t{0};", masA[i]);           // отпечатва стойност
                // ако стойността е кратна на бройния индекс, записва в нов масив и добавя в сумата
                if (masA[i] % (i+1) == 0)                   
                {
                    masB[cnt] = masA[i];
                    cnt += 1;
                    sum += masA[i];
                }
            }
            // отпечатва производния масив и стойностите на търсените показатели
            Console.Write("\nArray B: ");
            for (int j = 0; j < cnt; j++)
            {
                Console.Write("\t{0};",masB[j]);
            }
            Console.WriteLine("\nSum of elements of A, fully divisible by their order number: \t {0,6}", sum);
            Console.WriteLine("Count of elements of A, fully divisible by their order number: \t {0,6}", cnt);
            Console.ReadKey(false);
        }
    }
}
[tex]\color{lightseagreen}\text{''Който никога не е правил грешка, никога не е опитвал нещо ново.''} \\
\hspace{21em}\text{(Алберт Айнщайн)}[/tex]
Аватар
ammornil
Математик
 
Мнения: 3767
Регистриран на: 25 Май 2010, 19:28
Местоположение: Великобритания
Рейтинг: 1779

Re: Масив? C#

Мнениеот Sup3rlum » 06 Ное 2022, 20:37

C# като мултипарадигмен език също много добре се справя и от страна на declarative програмирането - нещо което е много полезно да се знае как да се използва в правилния контекст (най-често в при работа с данни в най-чиста форма).
Това което написах горе е отвратителна крайност на този принцип, но пък е един ред ;) .
Ако не ви карат да пишите кода на хартия и ви е позволено да използвате функции от езика (които го правят това което), виж и това, ще е добре да се запознаеш и с модерен начин ако искаш да се занимаваш с езика (дори и с други) по-нататък:

Код: Избери целия код
int[] A = { 1, 2, 3, 10, 24 };
List<int> B = A.Where((x, idx) => x % (idx + 1) == 0).ToList();

Console.WriteLine(B.Count);
Console.WriteLine(B.Sum());
Console.WriteLine(B.Select(x => x.ToString()).Aggregate((a, b) => a + " " + b));


Това което ти трябва да знаеш тук:
.Where(<predicate>) - филтрира елементи от лист по даден критерии <predicate>, в случая дадената кратност
.Selected(<transform>) - трансформира данните от един тип в друг, в случая от int към string

Другите са точно това което имената им означават
Sup3rlum
Фен на форума
 
Мнения: 247
Регистриран на: 19 Фев 2019, 02:08
Рейтинг: 347


Назад към C#, Java



Кой е на линия

Регистрирани потребители: Google [Bot]

Форум за математика(архив)