2014-08-03 2 views
-1

다음과 같은 프로그램을 만들려고합니다. 4 자리 숫자 (예 : 1001)가 주어지면 해당 숫자의 숫자 합계, 1001의 경우 1 + 0 1 * 1 * 1 * 1 * 2는 2 * 1 * 1 * 1 * 1 * 1과 다릅니다. 그 제품은 그 번호입니다.작동하지 않는 숫자에 대한 모스 부호를 반환하는 C# 프로그램

결과는 다음과 같은 형식의 콘솔에 인쇄한다 : 하나의 파이프로 구분 6 개 번호의 각 시퀀스들은 모스 표현과 : 1 .----이고, 2 ..---이다 .----|.----|.----|.----|..---| 새로운 행의 다음 순열 : .----|.----|.----|..---|.----| 등등.

문제는 내 솔루션에 정답이 표시되지 않고 정확한 숫자가 표시되지 않는다는 것입니다. 여기

내 코드 (그리고, 가능하다면, 내 실수가 어디 있는지 말해, 및 LINQ와 정규식과 하나님과의 문제에하지 한줄 해킹 솔루션은 무엇을 알고하십시오) :

 string n = Console.ReadLine(); 
     string[] digitsChar = new string[n.Length]; 
     for (int i = 0; i < 4; i++) 
     { 
      digitsChar[i] = n[i].ToString(); 
     } 
     int[] digits = new int[digitsChar.Length]; 
     for (int i = 0; i < 4; i++) 
     { 
      digits[i] = Convert.ToInt32(digitsChar[i]); 
     } 

     int morseProduct = digits.Sum(); 
     Console.WriteLine(morseProduct); 

     List<int> morseCodeNumbers = new List<int>(); 

     for (int i = 1; i < 6; i++) 
     { 
      for (int j = 1; i < 6; i++) 
     { 
       for (int k = 1; i < 6; i++) 
     { 
        for (int l = 1; i < 6; i++) 
     { 
         for (int m = 1; i < 6; i++) 
     { 
          for (int o = 1; o < 6; o++) 
          { 
           int product = i * j * k * l * m * o; 
           if (product == morseProduct) 
           { 
            morseCodeNumbers.Add(i); 
            morseCodeNumbers.Add(j); 
            morseCodeNumbers.Add(k); 
            morseCodeNumbers.Add(l); 
            morseCodeNumbers.Add(m); 
            morseCodeNumbers.Add(o); 
           } 
          } 
         } 
        } 
       } 
      }    
     } 

     int numberOfNumbers = morseCodeNumbers.Count; 
     string[] morseCodes = new string[] { "-----", ".----", "..---", "...--", "....-", "....." }; 

     for (int i = 0; i < numberOfNumbers; i++) 
     { 
      int counter = 0; 
      if (i % 5 == 0) 
      { 
       Console.WriteLine(); 
       counter = 0; 
      } 
      if (counter < 5) 
      { 
       int index = morseCodeNumbers[i]; 
       Console.Write(morseCodes[index] + "|"); 
       counter++; 
      } 
+0

는 귀하의 샘플에 문제가 발생한 것 같습니다. 그들은 5 자릿수 만 포함합니다. 그 맞습니까? – Alireza

답변

2

많은 for-loop 조건의 i는 j, k, l 및 m 대신 i를 나타냅니다. 증분 부분도 마찬가지입니다. 예를 들어 :

for (int i = 1; i <= 6; i++) 

당신은하지 않습니다 :

for (int j = 1; i < 6; i++) 

의 범위는 1에서 당신이 < <에 =을 변경해야하는 6 인 경우

for (int j = 1; j < 6; j++) 

는 또한, 참조해야한다 문자열이 문자열 배열로 변환되어 btw의 int 배열을 가져와야하므로 올바른 경우 :

for (int i = 0; i < 4; i++) 
{ 
    digitsChar[i] = n[i].ToString(); 
} 
int[] digits = new int[digitsChar.Length]; 
for (int i = 0; i < 4; i++) 
{ 
    digits[i] = Convert.ToInt32(digitsChar[i]); 
} 

당신이 할 수있는 그 (LINQ에 대한 SRY)과 같은 :

var digits = n.Select(c=>(int)char.GetNumericValue(c)).ToArray(); 
+0

고마워요! 복사 - 붙여 넣기 루프 조건의 위험 : D – depressor