C# 一个数字的数字总和,如果总和等于 9

C# Sum of digits of a number if the sum equals 9

我要将所有3位数字的和为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);
            }
        }
    }
}

我想你正在寻找这个:

    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
            }
    }
}

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

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);
}

您没有在每次循环迭代后重置总和。在每次迭代开始时,总和应该等于零。另外,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);
        }

为什么这么复杂?

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);    

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

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);              
        }
    }