计算可以添加三个数字的方式,使它们等于1000

时间:2009-02-23 18:39:26

标签: c#

我需要创建一个程序,计算可以添加三个数字的方式,使它们等于1000。

我认为这段代码应该可行,但它不会写出任何内容。我究竟做错了什么?任何提示或解决方案?

using System;

namespace ConsoleApp02
{
    class Program
    {
        public static void Main(string[] args)
        {
            for(int a = 0; a < 1000; a++)
            {
                for(int b = 0; b < 1000; b++)
                {
                    for(int c = 0; c < 1000; c++)
                    {
                        for(int puls = a + b + c; puls < 1000; puls++)
                        {
                            if(puls == 1000)
                            {
                                Console.WriteLine("{0} + {1} + {2} = 1000", a, b, c);
                            }
                        }
                    }
                }
            }
            Console.ReadKey(true);
        }
    }
}

11 个答案:

答案 0 :(得分:16)

你最内层的循环(迭代puls变量)实际上没有任何意义,因为它上面的条件(puls < 1000Console.WriteLine永远不会运行。

也许您应该测试A + B + C是否为1000。

另外,由于循环的界限(取决于问题陈述,你会发现你可能会遗漏几个特定的​​数字组合。)

答案 1 :(得分:5)

另外,这个特定的实现,虽然它可以工作(通过其他答案建议的修改),但由于算法的复杂性为O(n ^ 3),因此性能受到很大影响。换句话说,你正在经历最里面的检查。

这里有一个提示,你可以如何优化它至少O(n ^ 2)或只有一个百万次迭代:对于每一对 a b 生成的两个外部for循环, c 只有一个值将导致1000。

答案 2 :(得分:2)

问题未指明不允许使用负数。答案是无限的。

答案 3 :(得分:1)

你不需要内循环。

if (a+b+c == 1000)
   write

答案 4 :(得分:1)

在你的最后一个内循环中,“int puls = a + b + c; puls&lt; 1000; puls ++”你确保脉冲从不= 1000,如果脉冲不小于1000,它会从循环中踢出。这就是您获得 no 值的原因。但也要重新思考一下你的逻辑。

答案 5 :(得分:1)

如果您将此作业转为计算机科学专业的学生,​​您可能希望使用Dynamic Programming解决此问题。

答案 6 :(得分:0)

一旦最内层循环达到1000,它就会突破for循环,甚至不会在'if'语句中检查它是否为1000。

答案 7 :(得分:0)

该代码将不返回任何答案。

循环内部添加+ b + c并将结果放入脉冲。但是,在脉冲可以达到1000之前停止循环,然后在for语句内部进行测试,看看脉冲是否等于1000.所以,你不会得到答案。

在内环中测试脉冲1000。为什么呢?

答案 8 :(得分:0)

只需测试if(a + b + c == 1000){...},就可以替换最里面的for循环。 然后你可以添加优化,例如 - 一旦找到了一个总和,就不需要继续使用内部循环。

答案 9 :(得分:0)

该代码未涵盖以下情况

  • 1000 + 0 + 0
  • 0 + 10000 + 0
  • 0 + 0 + 10000

最里面的循环应该是如果而不是

如果循环或if子句中只有一个语句,则不需要{}。

编辑: 删除了代码答案

答案 10 :(得分:0)

试试这个:

{
    for(a=0;a<=500;a++)
    { 
        for (b=a;b<=500;b++)
        {
            c=1000-(a+b);
            count