Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#中的可分割数字(可能很容易回答)_C# - Fatal编程技术网

c#中的可分割数字(可能很容易回答)

c#中的可分割数字(可能很容易回答),c#,C#,我的任务是写一个c#程序,首先读3个数字 案例1: 如果这些数字中没有一个可以用3除,或者其中一个数字可以用3除,则值保持不变。 例如: 用户输入:7-5 6 方案产出:7-5 6 案例2: 否则,如果只有两个数字可被3除,则程序将取值较高的数字,并将该值增加1。 例如: 用户输入:9-5 6 程序输出:10-5 6//因此取较高的一个(9),并加上+1,因此变为(10) 案例3: 但是,如果这两个数字相同,那么程序会将+1添加到以秒为单位写入的数字上 例如: 用户输入:9 4 9 程序输出:9

我的任务是写一个c#程序,首先读3个数字

案例1: 如果这些数字中没有一个可以用3除,或者其中一个数字可以用3除,则值保持不变。 例如: 用户输入:7-5 6 方案产出:7-5 6

案例2: 否则,如果只有两个数字可被3除,则程序将取值较高的数字,并将该值增加1。 例如: 用户输入:9-5 6 程序输出:10-5 6//因此取较高的一个(9),并加上+1,因此变为(10)

案例3: 但是,如果这两个数字相同,那么程序会将+1添加到以秒为单位写入的数字上 例如: 用户输入:9 4 9 程序输出:9 4 10(程序将+1添加到最后9,因为它是第二次写入的)

案例4: 但是如果所有3个数字都可以被3除,那么程序将第二个数字+1和最后一个数字+2相加 例如: 用户输入:9-6 方案产出:9-5 8

案例解决方案:1//未找到 到目前为止,我有这个,如果我输入:“4”,程序会返回“4”。但如果我输入“344”或“434”或“443”,程序将返回“dog”,但它仍应将3个数字返回给我,因为只有1可与3分开

  {

            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) || (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
           {
               Console.WriteLine("dog");
               Console.ReadKey();
           }

        }
案例2的解决方案:未找到 案例3的解决方案:未找到
案例4的解决方案:未找到

我想提出一些建议

对于第一种情况,只需检查2是否不能被3整除。在任何情况下,如果两个不可分割,则它将满足以下标准:

// Divisible by three booleans:
bool a3 = (a % 3 == 0);
bool b3 = (b % 3 == 0);
bool c3 = (c % 3 == 0);

// Case 1:
if ((!a3 && !b3) || (!b3 && !c3) || (!a3 && !c3))
然后,对于第二个和第三个情况,只需确保不是每个数字都是三不可分的:

// Case 2 & 3:
else if (!(!a3 && !b3 && !c3))
那么你知道只有两个可以被三整除。检查两个数字的每个可能性,如:

if (a3 && b3)
{
    if (a > b)
        a++;
    else
        b++;
}
只要它是在那个顺序,它将满足情况3以及。然后处理你的最后一个案子。我相信这会让你走上正轨


我只想让你看看什么能帮你自己弄明白。您可能会遇到一些问题,这取决于您如何处理此问题。你在正确的轨道上。祝你好运

下面的代码是我如何解决这个问题的

我的逻辑是:

你有三件事需要注意

1) 多少可以被三整除

2) 他们中有谁是平等的吗

3) 最大的数字是多少

解决这些组件的问题后,只需正确嵌套它们

让大家知道我故意在这里放了一个bug,它会在某些时候触发。好的经验法则是永远不要撕碎代码,只是希望它在检查之前能够工作

try
{
int a, b, c;
int count = 0;

Console.WriteLine("Vnesite prvo stevilo: ");
a = Convert.ToInt32(Console.ReadLine());
bool a1 = (a % 3 == 0);
if (a1) count++;

Console.WriteLine("Vnesite drugo stevilo: ");
b = Convert.ToInt32(Console.ReadLine());
bool b1 = (b % 3 == 0);
if (b1) count++;

Console.WriteLine("Vnesite tretje stevilo: ");
c = Convert.ToInt32(Console.ReadLine());
bool c1 = (c % 3 == 0);
if (c1) count++;

if (count == 3)
{
    b++;
    c += 2;
}

if (count == 2)
{
    if (a1 & b1 & a != b) b++;
    else if ((a1 & c1 && a == c) || (b1 & c1 & b == c)) c++;
    else
    {
        int[] abc = { a, b, c };
        if (a == abc.Max()) a++;
        else if (b == abc.Max()) b++;
        else if (c == abc.Max()) c++;
    }
}

Console.WriteLine(string.Format("{0} {1} {2}", a, b, c));
Console.ReadKey();
}

catch
{
    Console.WriteLine("dog");
    Console.ReadKey();
}

你不应该把所有条件都放在一个if语句中。只需使用
else if
,并在其中放入第二个条件,然后在其中执行您的逻辑。然后另一个
,如果
是第三个条件等等……我在这里找不到问题。你的具体问题是什么?@EricLippert:我的印象是OP需要帮助找到其他案例。我认为如果OP遵循kazem的建议,他/她将走上正确的道路,并可能自己解决。谢谢,这为我解决了所有4个案例。但我不懂的是怎么读!(a%3!=0&&b%3!=0&&c%3!=0)您能解释一下吗?它是有效的,但我不知道有多确定!将每个感叹号替换为NOT:(NOT(NOTa3&&NOTb3&&NOTc3))。a3表示整数a可以被3整除,所以!a3表示a不能被三整除。因为我们已经检查了3个数字中的2个是否不能被3整除,所以我们知道3个数字中至少有2个是可以整除的。我们只是确保不是所有的3个数字都能被3整除(因为这是为最后一种情况保留的)。