C#可分为3(简单)

时间:2015-10-15 20:11:52

标签: math

所以我有一个帮助。它是这样的。这有点复杂。

程序从用户读取3个数字。

如果这些数字中的任何一个都不能用3或者这些数字中的一个可以用3分割,则3个输入的数字保持不变。(例1)

如果这些数字中的两个可以分割为3,那么程序将获得具有较高值的​​数字,并为其添加+1。(情况2)。但如果这两个数字相等,那么第二个数字就会增加+1。(案例3)

如果所有数字都可以分为3,则第二个输入数字变为+1,第三个输入数字加上+2。(情况4):

案例1:输入:7 9 7         输出:7 7 7

案例2:输入:9 -5 6         输出:10 -5 6 案例3:输入:9 4 9         输出:9 4 10

案例4:输入:9 -6 6         输出:9 -5 8

这就是我所拥有的,但它不起作用。

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

        int a, b, c;
        Console.WriteLine("Vnesite prvo stevilo: ");
        a = Convert.ToInt32(Console.ReadLine());
        Console.WriteLine("Vnesite drugo stevilo: ");
        b = Convert.ToInt32(Console.ReadLine());
        Console.WriteLine("Vnesite tretje stevilo: ");
        c = Convert.ToInt32(Console.ReadLine());

        if (a % 3 != 0 && b % 3 != 0 && c % 3 != 0)
        {
            Console.WriteLine(" " + a + " " + b + " " + c);
            Console.ReadKey();
        }
        else if (a % 3 == 0 && b % 3 != 0 && c % 3 != 0 || a % 3 != 0 && b % 3 == 0 && c % 3 != 0 || a % 3 != 0 || b % 3 != 0 || c % 3 == 0)
        {
            Console.WriteLine(" " + a + " " + b + " " + c);
            Console.ReadKey();
        }
        else if (a % 3 == 0 && b % 3 == 0 && c % 3 != 0 || a % 3 == 0 && b % 3 != 0 && c % 3 == 0 || a % 3 != 0 && b % 3 == 0 && c % 3 == 0)
        {
            if (a > b)
            {
                a = a + 1;
            }
            else if (b > a)
            {
                b = b + 1;
            }
            else if (b == a) ;
            {
                b = b + 1;
            }
            Console.WriteLine(a);
            Console.WriteLine(b);
            Console.WriteLine(c);
            Console.ReadKey();
        }
        else if (a % 3 == 0 && b % 3 == 0 && c % 3 == 0)
        {
            b = b + 1;
            c = c + 1;
            Console.WriteLine(a);
            Console.WriteLine(b);
            Console.WriteLine(c);
            Console.ReadKey();
        }

    }
}

1 个答案:

答案 0 :(得分:-1)

我将调试此代码的一部分,然后认为其他修复程序将以类似的方式完成。以上面代码的一部分为例来演示:

(a % 3 == 0 && b % 3 != 0 && c % 3 != 0 || a % 3 != 0 && b % 3 == 0 && c % 3 != 0 || a % 3 != 0 || b % 3 != 0 || c % 3 == 0)

假设这正在检查三者中的一个是否可以被3整除,我可能会考虑以这种方式重写它:

((a % 3 == 0 && b % 3 != 0 && c % 3 != 0) || (a % 3 != 0 && b % 3 == 0 && c % 3 != 0) || (a % 3 != 0 && b % 3 != 0 && c % 3 == 0))

请注意,不仅添加了括号以便将事物组合在一起,而且最后一组3中包含&&而不是||

放入括号的原因是您希望对事物进行一起评估。第一个代码行可能有一个问题,即如果a不能被3整除,则整个表达式被短路为假,因为假的AND将是假的,类似于乘以0将在常规数学中产生0。

这是我在你的逻辑中最初复制的一部分:

|| a % 3 != 0 || b % 3 != 0 || c % 3 == 0)

我把它更改为:

|| (a % 3 != 0 && b % 3 != 0 && c % 3 == 0))

我用||替换了几个&&,因为这部分检查c可以被3整除,但a和b不是一个整体。