2016-11-15 56 views
0

我希望总数为9的所有数字都在控制台中写入。 这就是我想出了这么远,它不工作:C#如果总和等于9,则为数字的位数之和

class Program 
{ 
    static void Main(string[] args) 
    { 
     int sum = 0; 
     for (int n = 100; n < 1000; n++) 
     { 
      while (n <1000) 
      { 
       sum += n % 10; 
       n /= 10; 
       if (sum == 9) 
       Console.WriteLine(sum); 
      } 
     } 
    } 
} 
+2

那么你使用的是'sum + = n%10;'这意味着一旦'sum == 9'是真的,随着总和的增加,它永远不会变成真。您可能希望在每次迭代结束时将其重置为0。这可以通过直接设置它的值来完成,而不是增加 - 'sum = n%10;'或者在你的条件之后,总和= 0;' –

+1

这是一个简单的修复,我确定你会花费几分钟后逐步调试你的变量,你会看到问题 –

+0

@AlfieGoodacre是正确的,但还有更多的; sum开始为0,但在第一个while循环之后,sum = 10.然后你减少你的for的计数器使它= 10。下一个循环,sum = 11,并且n变成1.你的while永远不会退出 – bixarrio

回答

3

我会用三个环,一个用于每个数字:

for (int i1 = 1; i1 < 10; i1++) 
for (int i2 = 0; i2 < 10; i2++) 
for (int i3 = 0; i3 < 10; i3++) 
{ 
    if (i1 + i2 + i3 == 9) 
     Console.WriteLine("{0}{1}{2}", i1, i2, i3); 
} 
+0

ty很多<3 .. – Toni

+2

依赖于模10,然后除以10直到0的答案确实具有如下优点:如果需求改变,更容易扩展到更长的数字。 – PaulF

+0

我同意@PaulF。这只针对这个问题。模数解决方案可以很容易地确定它们,但只是设置范围。好的解决方案无论如何 – Everyone

0

我认为你正在寻找这样的:

class Program 
{ 
    static void Main(string[] args) 
    { 

     for (int n = 100; n < 1000; n++) 
      { 
       int sum = 0; 
       int num = n; 
       while (num != 0) 
       { 
        int r = num % 10; 
        sum += r; 
        num /= 10; 
       } 
       if (sum == 9) 
        Console.WriteLine(n);//.....Number whose all digit sum ==9 
      } 
    } 
} 
+0

ty帮助但它不会退出而是 – Toni

+0

@toni什么是n/= 10的输出; ? –

+0

如果你正在改变n for循环如何正确执行? – Everyone

2

您在每次循环迭代后都没有重置总和。 sum在每次迭代开始时应该等于零。另外,while循环是错误的。试试这个:

for(int n=100;n<1000;n++) 
     { 
      sum=0; 
      int i = n; 
      while(i!=0) { 
       sum += i % 10; 
       i /= 10; 
      } 
      if (sum == 9) 
      Console.WriteLine("Number {0} has digit sum of {1}", n, sum); 
     } 
2

为什么soo commplicated?

for (int n = 100; n < 1000; n++) 
{ 
    var s1 = n/100 % 10; 
    var s2 = n/10 % 10; 
    var s3 = n/1 % 10; 

    var sum = s1+s2+s3; 
    if (sum == 9) 
    Console.WriteLine(n);  
} 

对的人,谁不喜欢简单的方法:d

Enumerable.Range(0, 1000).Select(x => x.ToString()) 
    .Where(x => x.Length == 3).Select(x => new {x, sum=x.ToCharArray() 
    .Select(c=>int.Parse(c.ToString())).Sum()}).Where(x=>x.sum == 9) 
    .Select(x=>x.x).ToList().ForEach(Console.WriteLine);  

冲,试图创建非通用,但最快的解决方案。

for (var i = 1; i <= 10; i++) 
    for (var j = 0; j < 10; j++) 
    { 
     if ((i>1 && j == 0) || i < j)   
     {     
      Console.WriteLine(i * 90 + j * 9);    
     } 
    } 
+2

第二个也适用于那些喜欢他们的程序运行速度慢1000倍的人haha – Everyone

+0

依赖于模10,然后除以10直到0的答案确实具有更容易扩展到更长数字的优点,需求改变。 – PaulF

+1

@PaulF不同意。可以通过不同的方式更改需求,并且内部循环可以是优势或劣势 – tym32167

相关问题