Название: Алгоритмическое мышление при решении задач (Шамшев А. Б.)

Жанр: Информационные системы и технологии

Просмотров: 1440


Задача 18: элементы списка, кратные числу 3, обнулить.

Рассуждения:

1.  Для  задачи  нужно  создать  список.  А  для  списка  нужно  объявить элемент списка. Список характеризуется головой.

2.  Пусть список будем заполнять случайными числами. И каждое новое

число будем добавлять в голову.

3.  После формирования списка его надо вывести на экран.

4.  После этого мы должны пройтись по всем элементам списка от первого

(head)  до  последнего. Но  последний элемент надо  тоже  обработать.

Поэтому надо идти по списку, пока текущий элемент существует, т. е. не равен null. В  списке несколько элементов, поэтому должен быть цикл. После обработки текущего элемента надо перемещаться на следующий  элемент,  т. е.  должна  быть  операция  типа  curNode  = curNode.next;

for (ListNode curNode = head; curNode != null; curNode =

curNode.next) …

5.  Для  каждого  элемента,  если  данное  в  нем  (т. е.  число)  кратно  3,

заменить число в элементе на 3. Поэтому в виде кодов реализация будет следующая:

public void process() {

for (ListNode curNode = head; curNode != null; curNode =

curNode.next) {

if (curNode.data \% 3 == 0) {

curNode.data = 0;

}

}

}

6.  Операция  вывода  уже  была  рассмотрена  ранее.  Поэтому  приведем полный код решения:

using System;

 

namespace ConsoleApplication17 {

class Program {

static void Main() {

SimpleList myList = new SimpleList(); Console.Write("Введите  количество  элементов списка:  "); int n = Int32.Parse(Console.ReadLine());

Random r = new Random();

for (int i = 0; i < n; i++) { int curValue = r.Next(100); myList.addToHead(curValue);

}

Console.Write("Список  до   обработки: ");

myList.print();

myList.process();

Console.Write("Список  после  обработки: ");

myList.print();

Console.ReadKey();

}

}

 

class ListNode { public int data; public ListNode next;

 

public ListNode(int _data, ListNode _next) {

data = _data;

next = _next;

}

}

 

class SimpleList {

public ListNode head = null;

 

public void addToHead(int newData) {

head = new ListNode(newData, head);

}

 

public void print() {

for (ListNode curNode = head; curNode != null; Console.Write(curNode.data + " "), curNode =

curNode.next) ; Console.WriteLine();

}

 

public void process() {

for (ListNode curNode = head; curNode != null; curNode =

curNode.next) {

if (curNode.data \% 3 == 0) {

curNode.data = 0;

}

}

}

}

}