JessicaLisa1 Ответов: 2

Порядковый номер Collatz с использованием C#


Чтобы получить последовательность Коллатца из числа, если оно четное, разделите его на два, а если нечетное, умножьте на три и добавьте один. Продолжайте операцию над результатом предыдущей операции, пока число не станет 1.

Как вы видите внизу кода, я попытался перечислить число в строке, и после того, как строка будет напечатана, я хочу получить другое значение с помощью консоли.ReadLine (); но он не делает того, что я намеревался.

Не могли бы вы дать мне несколько советов или подсказок, чтобы я мог это исправить?

Спасибо, ребята.

Что я уже пробовал:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Exercise
{
	class Program
	{
		static void Main(string[] args)
		{
			int sequenceNumber = Convert.ToInt32(Console.ReadLine());
			List<int> list = new List<int>();

			while (sequenceNumber>=1)
			{
				if (sequenceNumber == 1)
				{
					Console.WriteLine(1);
					sequenceNumber = Convert.ToInt32(Console.ReadLine());
				}

				else if(sequenceNumber>1)
				{
					while (sequenceNumber>=1)
					{
						if (sequenceNumber == 1)
						{
							list.Add(sequenceNumber);
						}

						else if (sequenceNumber % 2 == 0)
						{
							list.Add(sequenceNumber);
							sequenceNumber = sequenceNumber / 2;

						}
						else if (sequenceNumber % 2 != 0)
						{
							list.Add(sequenceNumber);
							sequenceNumber = sequenceNumber * 3 + 1;

						}
					}

					list.ForEach(Console.WriteLine);
					foreach (int i in list)
					{
						Console.Write(i + " ");

					}
				}//else

				sequenceNumber = Convert.ToInt32(Console.ReadLine());


			}    //while--sequence number

			

		}//main



	}
}

Patrice T

- но это не то, что я намеревался."
Это нам не информативно, мы не знаем, что вы имели в виду.
Расскажите нам, что он делает и почему это неправильно.

2 Ответов

Рейтинг:
1

Patrice T

Ваш код чрезмерно спроектирован, в структуре "If Then Else" вы достигаете части Else, потому что условие не выполнено, вам не нужно проверять условие not.

if (sequenceNumber == 1)
{
}
else if(sequenceNumber>1)
{
}

может быть упрощен до
// Here, you know thar (sequenceNumber >= 1) as per previous line
if (sequenceNumber == 1)
{
	// this part is executed because (sequenceNumber == 1)
}
else if(sequenceNumber>1)
{
	// Here, you know that (sequenceNumber >= 1) and (sequenceNumber != 1)
	// which combine to (sequenceNumber > 1)
}

Используйте отладчик, чтобы увидеть, что делает ваш код во время выполнения.


Существует инструмент, который позволяет вам видеть, что делает ваш код, его имя отладчик Это также отличный инструмент обучения, потому что он показывает вам реальность, и вы можете увидеть, какие ожидания соответствуют реальности.
Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик-Википедия, свободная энциклопедия[^]
Отладка кода C# в Visual Studio-YouTube[^]
Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.


Graeme_Grant

Что-если бы значение было отрицательным или нулевым? потерпеть неудачу? :P

Patrice T

Предыдущая строка - " while (sequenceNumber>=1)", Что означает не отрицательное и не нулевое значение.: p

Рейтинг:
0

Graeme_Grant

Это твое домашнее задание... Вы должны решить ее самостоятельно. Однако ничто не мешает вам сделать поиск в Google: в C# Коллатца[^] который имеет ряд решений, которые вы можете изучить... Нравится:

* Гипотеза Коллатца [^]
* GitHub-genewitch/collatz: гипотеза Коллатца простой код C# [^]
* GitHub-steelethis/Collatz_Conjecture: реализация гипотезы Коллатца в C#.[^]
* Гипотеза коллаца - dcode.fr[^]
* Проект Эйлера 14: самая длинная последовательность Коллатца в C# | MathBlog[^]
* и еще...