2010-12-12 3 views
2

두 개의 int를 인수로 허용하는 메소드를 작성해야한다. min과 max. 첫 번째 줄에서 그 범위의 모든 숫자를 인쇄해야합니다. 다음 라인에서 나는 min + 1로 시작하여 모든 숫자를 최대 값까지 인쇄 한 다음 범위의 앞쪽으로 돌아가서 min을 인쇄합니다. 다음 라인에서는 min + 2로 시작합니다. 그리고이 작업을 범위의 각 숫자로 반복 할 때까지 계속 설명합니다. 설명하기가 매우 어렵습니다. 두 가지 예가 있습니다. 최소 및 최대 인수로 1과 5를 전달한다고 가정 해보십시오.루프를 리셋하는 방법을 알 수 없다. (예제 참조)

12345 
23451 
34512 
45123 
51234 

또는 3 구가 전달 된 경우, 나는이 기대 : 나는 모든 종류의 것들을 시도했습니다

3456789 
4567893 
5678934 
6789345 
7893456 
8934567 
9345678 

, 내가이 확신 나는 방법이를 인쇄 할 이것을 실현하는 쉬운 방법은 내가 깨닫지 못하는 것입니다. 나는 배열이나 arrayLists없이 이것을해야한다. 나는 내가 함께 일할 좋은 기반을 가지고 있다고 생각하지만, 여기서부터 어디로 가야할 지 알 수 없다. 내 기본 코드를 인쇄이 :

12345 
2345 
345 
45 
5 

그리고 이것은 :

3456789 
456789 
56789 
6789 
789 
89 
9 

나는 난처한 상황에 빠진입니다.

public void printSquare(int min, int max){ 
    for (int i=min; i<=max; i++){ 
     for (int j=i; j<=max; j++){ 
     System.out.print(j);   
     } 
    System.out.println(); 
    } 
} 
+0

는 소리. – Falmarri

+0

그것은 숙제가 아닙니다. 제가 읽은 웹 사이트의 일부 자바 샘플 질문에서 온 것입니다. 나는 학교에 다니지 않고, 나는 단지 자바를 배우고 있습니다. =) 나는 Peter와 Raskolnikov의 대답에 대해 생각할 것입니다. 내가 결론에 도달 할 수 있는지 보아라. – Bots

답변

2

당신은 각 행에서 원하는 얼마나 많은 값에 대해 생각하고 그 값을해야 결정한다 : 여기 내 코드입니다. 솔루션을 제공하지 않고서는 더 명확하게하기가 어렵습니다.

Google에 알려주세요.

+0

더 정확하게 말하면 : 그 시점의 루프 카운터의 값에 따라 값이 무엇인지 어떻게 결정합니까? –

+0

아주 간단한 표기로 당신이 그것을 해결할 수있을 거라고 생각했습니다. 그러나 당신이 할 수 없다면 @ 택스맨의 해결책을 볼 수 있습니다. –

0

누락 된 숫자를 인쇄하는 방법에 대해 생각하십시오. 대답은 아래에 있습니다. 문제를 해결할 수 없다면 확인할 수 있습니다.


이것은 또한 누락 된 부분 인쇄해야합니다 :이 일을 실행하지 않은

public void printSquare(int min, int max){ 
    for (int i=min; i<=max; i++){ 
     for (int j=i; j<=max; j++){ 
     System.out.print(j);   
     } 
     for (int k=0; k<i-min; k++){ 
     System.out.print(min+k);   
     } 
     System.out.println(); 
    } 
} 
+0

읽을 수 있도록 형식을 다시 지정할 수 있습니까? – Milhous

0

을하지만이 작동하지 않을 수 있습니다 :

public void printSquare(int min, int max){ 

    int dif = max - min; 
    for (int i=min; i<=max; i++){ 

     for (int j=i; j <= i+dif ; j++){ 
     int temp = j; 
     if (temp > max) temp = temp - max; 
     System.out.print(temp);   
     } 

    System.out.println(); 
    } 

} 
0

시도하고 너무 같은 배열을 이동 :

static void Main(string[] args) 
    { 
     // this will work equally well with numbers letters or other types of characters 
     int[] nums = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; 
     String a = "hello"; 
     for (int i = 0; i < nums.Length; i++) 
     { 
      int j = 5; 
      int num = i; 
      while (j-- > 0) 
      { 
       if (num >= nums.Length) 
       { 
        num = 0; 
       } 

       // shift the loop 
       Console.Write(nums[num++]); 
      } 
      Console.WriteLine(); 
     } 
    } 
1

피터가 옳고 IMO가 올바른 방식으로 숙제 질문에 대답합니다. 각 줄마다 몇 개의 요소가 필요한지 알기 때문에 많은 요소를 제공하는 외부 루프가 필요합니다. 이렇게하면 지금보고 계시는 계단식 동작을 방해 할 수 있습니다.

그 시점에서 내부 루프에 대해 생각해 볼 필요가 있으며 모듈러스 연산자 (%)를 사용하면 가장 쉽게 찾을 수 있습니다. 이렇게하면 대상을 거치지 않고 반복 할 수 있습니다.

당신은 거기에서 알아낼 수 있어야하며, 적어도이 수준의 개발에서는 다른 사람으로부터 알고리즘을 복사하는 것보다 알고리즘을 이해하는 것이 훨씬 낫습니다. 행운을 빕니다!

0
public class Test1{ 
    public void printSquare(int min, int max){ 
     for (int i=min; i<=max; i++){ 
      for (int j=i; j<=max; j++){ 
       System.out.print(j);  
      } 
      for(int k= min; k<i; k++){ 
       System.out.print(k);  
      } 
      //System.out.print(i-1); 
      System.out.println(); 
     } 
    } 
    public static void main(String[] args){ 
     Test1 t = new Test1(); 
     t.printSquare(1,5); 
    } 
} 
+0

답변에 대한 설명을 추가하십시오. –

3

매우 간단한 구현입니다. 희망이 도움이!

int n = max-min+1; 
    for (int i=0 ; i<n; i++){ 
    for (int j=0; j<n; j++) 
    cout<<min + (i+j)%n; 
     cout<<"\n"; 
    } 

출력 :이 순환 될 수 있었던 것처럼

min = 3 | max = 9 

    3456789 
    4567893 
    5678934 
    6789345 
    7893456 
    8934567 
    9345678 
3

여기 코드입니다 ..

for i = 0 to max-min 
for j = 0 to max-min 
print min + (i+j)%n