gpt4 book ai didi

C# 完美数练习

转载 作者:太空宇宙 更新时间:2023-11-03 17:11:02 25 4
gpt4 key购买 nike

你能帮我做下面的练习吗? (这不是家庭作业,只是我正在使用的书中的练习。)

“如果一个整数的因数(包括 1(但不包括该数本身))总和为该数,则该整数被称为完美数。例如,6 是一个完美数,因为 6 = 1 + 2 + 3。编写判断参数值是否为完全数的方法Perfect。在一个判断并显示2到1000之间所有完全数的app中使用该方法。显示每个完全数的因数以确认该数确实是完全数。"

到目前为止,这是我得到的:

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

namespace Perfect_Numbers2
{
class Program
{
static bool IsItPerfect(int value)
{
int x = 0;

int counter = 0;

bool IsPerfect = false;

List<int> myList = new List<int>();

for (int i = value; i <= value; i++)
{
for (int j = 1; j < value; j++)
{
// if the remainder of i divided by j is zero, then j is a factor of i
if (i%j == 0) {
myList[counter] = j; //add j to the list
counter++;
}
for (int k = 0; k < counter; k++)
{
// add all the numbers in the list together, then
x = myList[k] + myList[k + 1];
}
// test if the sum of the factors equals the number itself (in which case it is a perfect number)
if (x == i) {
IsPerfect = true;
}
}
Console.WriteLine(i);
}
return IsPerfect;
}
static void Main(string[] args)
{
bool IsItAPerfectNum = false;

for (int i = 2; i < 1001; i++)
{
IsItAPerfectNum = IsItPerfect(i);
}
}
}
}

你会怎么做?我的代码可以修复吗?你会怎么修?谢谢!

我在 myList[counter] = j 行遇到错误; (索引超出范围)而且它没有像它应该的那样显示完美的数字......

EDIT = 我做了一些修改;

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

namespace Perfect_Numbers2
{
class Program
{
static bool IsItPerfect(int value)
{
int x = 0;

int counter = 0;

bool IsPerfect = false;

List<int> myList = new List<int>();

for (int i = value; i <= value; i++)
{
for (int j = 1; j < i; j++)
{
if (i%j == 0) // if the remainder of i divided by j is zero, then j is a factor of i
{
myList.Add(j); //add j to the list


}
x = myList.Sum();
if (x == i) // test if the sum of the factors equals the number itself (in which case it is a perfect number)
{
IsPerfect = true;
}

}
Console.WriteLine(i);
}
return IsPerfect;
}
static void Main(string[] args)
{
bool IsItAPerfectNum = false;

for (int i = 2; i < 1001; i++)
{
IsItAPerfectNum = IsItPerfect(i);
Console.WriteLine(IsItAPerfectNum);
Console.ReadKey(true);
}
}
}
}

现在我可以循环遍历所有数字直到 1000,它会显示它是否完美(真或假)[这不是练习要求的,但它是朝着正确方向迈出的一步(练习说它应该只显示完美的数字)]。

无论如何,奇怪的是它在数字 24 处说的是真的,这不是一个完美的数字.... http://en.wikipedia.org/wiki/Perfect_numbers#Examples

为什么 24 不同?

非常感谢

最佳答案

can you help me with the following exercise please?

是的。我不会告诉你错误在哪里,而是教你如何找到你的错误。更妙的是,同样的技术将降低您首先导致错误的可能性。

这里的关键是将问题分解成小部分,每个小部分都可以独立测试。你已经开始这样做了!您有两个方法:MainIsItPerfect您至少应该有另外三种方法。你应该有的方法是:

  • IsDivisor -- 接受两个整数,如果第一个整除第二个则返回 true。
  • GetAllDivisors -- 接受一个整数,返回所有除数的列表
  • Sum -- 获取整数列表,返回总和

您的方法 IsPerfect 应该调用 GetAllDivisorsSum 并将总和与原始数字进行比较,这就是全部 它应该这样做。您的方法 GetAllDivisors 应该调用 IsDivisor,等等。

你不容易找到错误,因为你的方法做的太多了。如果您没有得到正确的结果,并且您有四种方法而不是一种方法,那么您可以独立测试每种方法以确保其有效,如果无效则修复它。

关于C# 完美数练习,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18520275/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com