2015-10-24 36 views
-2

我有一個任務,寫一個C#程序,首先讀取3個數字。在c#中可分的數字(可能很容易回答)

CASE1: 如果這些數字中沒有一個可以用3分割或者其中一個數字可以用3分割,則值保持不變。 例如: 用戶輸入:7個-5 6 程序輸出:7 -5 6

CASE2: ELSE如果只有兩個數字是可分割帶3,該程序把具有較高的值,並增加該值爲1. 例如: 用戶輸入:9個-5 6 計劃輸出:10 -5 6 // SO它採取了較高的一個(9)中,加入1,從而它成爲(10)

CASE3: 但是如果這兩個數字是相同的,那麼程序給第二個寫入的數字加上+1,例如: 用戶輸入:9個4 9 程序輸出:9 4 10(方案增加了1到最後9,因爲它是寫出來第二)

CASE4: 但如果所有的3個數字是可分割帶3,則程序將所述第二數目1和最後一個數2 例如: 用戶輸入:9個-6 6 計劃輸出:9 -5 8

解CASE:1 // NOT FOUND 所以我這是迄今爲止,如果我輸入:「4 4 4」程序返回「4 4 4」給我。但是,如果我輸入「3 4 4」或「4 3 4」或「4 4 3」,程序將返回「狗」,但它仍然應該返回給我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(); 
      } 

     } 

SOLUTION情況2:NOT FOUND 解案例3:NOT FOUND 解案例4:NOT FOUND

+2

你不應該把所有的條件放在一個if語句中。只需使用'else if'並在其中添加第二個條件,並在其中執行邏輯。然後另一個「其他如果」將是第三條件等... –

+2

我在這裏找不到問題。你的具體問題是什麼? –

+1

@EricLippert:我的印象是OP希望幫助找到其他案件。我認爲如果OP遵循kazem的建議,他/她將走在正確的軌道上,並可能自己解決。 – ray

回答

0

我願提出幾點建議。

對於第一種情況,只檢查兩個是否不能被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。然後處理你最後的情況。我相信這會讓你走上正軌。

我試圖只告訴你什麼可以幫助你弄清楚自己。您可能會遇到一些問題,具體取決於您如何接近此問題。你在正確的軌道上。祝你好運!

+0

謝謝,這爲我解決了所有4個案例。但我不明白的是如何讀出 !(a%3!= 0 && b%3!= 0 && c%3!= 0) 你能解釋一下嗎?它的作品,但我不知道如何 –

+0

當然!用NOT代替每個感嘆號:(NOT(nota3 && NOTb3 && NOTc3))。 a3意味着整數a可以被3整除,所以!a3意味着a不能被3整除。由於我們已經檢查了3個數字中的2個是否不能被3整除,我們知道三個數字中至少有兩個是可以整除的。我們只是確保不是所有3個數字都不能被3整除(因爲這是爲最後一種情況保留的)。 –

0

下面的代碼是我將如何去解決這個問題。

這裏是我的邏輯:

你有你需要跟蹤的三件事情。

1)有多少由三個

2整除)做任何他們彼此相當

3)什麼是數量最多

後你解決了這些組件,這只是一個它們正確嵌套的問題。

讓我們知道,我故意把一個錯誤在這裏,將觸發一些時間。好的經驗法則是永遠不要翻譯代碼,並期望它在查看之前能夠正常工作。

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(); 
} 
相關問題