【问题标题】:returns a list of prime numbers from the argument list, all numbers in the result list should be unique从参数列表中返回素数列表,结果列表中的所有数字都应该是唯一的
【发布时间】:2021-06-15 07:03:57
【问题描述】:

我的任务是: 请实现 GetListOfPrimeNumbers 方法,该方法从参数列表中返回素数列表。 结果列表中的所有数字都应该是唯一的,不应将重复项添加到结果列表中。 如果它的唯一除数是 1 和这个数字本身,则该数字是素数。 禁止使用 Linq

给定数字: {23}{27}{29}{5}{30}{8}{19}{29}{26}{8}{17}{24}{19}{4}{4}{9}{15 }{6}{9}{29}

预计:{23}{29}{5}{19}{17}

实际:{23}{27}{29}{5}{19}{29}{17}{19}{9}{15}{9}{29}

我已经写了这段代码:

        List<int> numbers2 = new List<int>();
        foreach (int x in numbers)
        {
            for (int i = 2; i < x; i++)
            {
                if (x % i == 0)

                {

                    break;
                }
                else
                {
                    numbers2.Add(x);
                    break;
                }

            }

        }
       
        for (int i = 0; i < numbers2.Count-1; i++)
        {
            if (numbers2[i] == numbers2[i + 1])
            {
                numbers2.Remove(numbers2[i]);
            }
        }
        for (int i = 0; i < numbers2.Count - 1; i++)
        {
            if (numbers2[i] == numbers2[i + 1])
            {
                numbers2.Remove(numbers2[i]);
            }
        }
        return numbers2;

什么是错误?请帮忙!

【问题讨论】:

  • 将它们存储在哈希集中,而不是列表中。还要调查为什么你的代码认为 2715 是素数,而它们显然不是。
  • 您不检查列表中是否已经存在号码,因此您多次添加相同的号码。
  • 谢谢,我检查了列表中是否已经存在数字。这有助于避免重复
  • 但我还有 27 和 15((
  • 提示 - numbers2.Add(x); 应该在循环的外部,而不是在 else。

标签: c# list duplicates primes


【解决方案1】:

你可以试试:)

int[] nums = { 23, 27, 29, 5, 30, 8, 19, 29, 26, 8, 17, 24, 19, 4, 4, 9, 15, 6, 9, 29 };
        List<int> numbers = nums.ToList();
        List<int> numbers2 = new List<int>();
        foreach (int number in numbers)
        {
            bool IsprimeNumber = true;
            long value = Convert.ToInt32(Math.Sqrt(number));
            if (number % 2 == 0)
            {
                IsprimeNumber = false;
            }
            for (long i = 3; i <= value; i = i + 2)
            {
                if (number % i == 0)
                {
                    IsprimeNumber = false;
                    break;
                }

            }
            if (IsprimeNumber)
            {
                if (!numbers2.Contains(number))
                {
                    numbers2.Add(number);
                }
            }
        }
        foreach (int numero in numbers2)
        {
            Console.WriteLine(numero);
        }
        Console.ReadLine();

【讨论】:

    猜你喜欢
    • 2012-03-09
    • 1970-01-01
    • 1970-01-01
    • 2014-07-09
    • 2013-05-06
    • 2021-05-19
    • 2020-10-15
    • 2022-11-11
    • 2012-06-08
    相关资源
    最近更新 更多