我正在尝试开发一个程序,打印到控制台所有素数在1到100之间。我在试图概念化问题时遇到了麻烦。有多个嵌套循环,我忘记了逻辑。这是不完整的代码/伪代码混乱:
using System;
class Prime_Screening
{
static void Main()
{
Console.WriteLine("This program screens all numbers between 1 and 100 for primes and displays the results.");
for (int numberToPrimeCheck = 2; numberToPrimeCheck <= 100; numberToPrimeCheck++)
{
for (int divisor = 2; divisor <= Math.Sqrt(numberToPrimeCheck); divisor++)
{
int remainder = 0;
while (remainder = 0)
{
remainder = numberToPrimeCheck % divisor;
if (remainder != 0)
{
break;
}
}
}
}
}
}
这是一个巨大的混乱。我不知道从哪里开始这个节目。从逻辑上讲,它看起来像一个大球串。我知道remaining = numberToPrimeCheck%divisor是这个问题的核心,但我是从那里开始还是在第一次循环?
在编写像这样的小程序时,您是如何以及在何处开始考虑它的?我是一名初学程序员,但书籍并没有教你如何思考编程问题。有人可以教我解决这类问题的思维过程吗?
编辑:我明白了,问题太宽泛了。但是有些问题本质上并不是狭隘的,而是成为一名优秀程序员所必需的。因此过于严格。我不仅仅想要我的代码的答案,我想学习如何思考和解决一般的编程问题。答案 0 :(得分:0)
using System;
class Prime_Screening
{
bool prime;
static void Main()
{
Console.WriteLine("Prime numbers x, where: 0 < x < 100");
for (int num= 2; num<= 100; num++)
{
prime = True;
for (int div= 2; div<= Math.Sqrt(num); div++)
if(num % div== 0)
prime = False;
if (prime)
Console.Write(num.ToString() + ", ");
}
}
}
这种方式非常简单:
它检查是否有任何除数是当前数字的因子,如果是,则将变量prime
设置为false。否则,素数保持为真,数字将被打印。
答案 1 :(得分:-1)
这听起来像是一个考试问题......然而,你应该能够通过“mod”功能实现这一目标。如果“mod”== 0则prime = false。
答案 2 :(得分:-2)
这是正确的代码:
using System;
class Program
{
static void Main()
{
Console.WriteLine("This program screens all numbers between 1 and 100 for primes and displays the results.");
for (var numberToPrimeCheck = 2; numberToPrimeCheck <= 100; numberToPrimeCheck++)
{
var remainder = 1;
for (var divisor = 2; divisor <= Math.Sqrt(numberToPrimeCheck); divisor++)
{
remainder = numberToPrimeCheck % divisor;
if (remainder == 0)
{
break;
}
}
if (remainder != 0)
Console.WriteLine(numberToPrimeCheck);
}
}
}