배열 과 조합 문제
(1) 주어진 숫자 자릿수 와 진법 으로 모든 조합 을 출력 합 니 다.
이 문제 에 대해 사람의 생각 에 따 르 면 숫자의 모든 위치 에 대해 끊임없이 값 을 선택 하 는 것 이다. 예 를 들 어 3 자리 2 진수 와 같이 우 리 는 먼저 가장 높 은 위 치 를 0 으로 취한 다음 에 다음 의 높 은 위 치 를 선택 하고 다음 의 높 은 위 치 를 선택 한 다음 에 가장 낮은 위 치 를 0 으로 한다. 이때 이미 모든 위치 에 대해 값 을 다 취하 고 직접 출력 하면 된다.모든 값 을 저장 하기 위해 서 는 배열 을 미리 설명 해 야 합 니 다.출력 이 끝 난 후에 가장 낮은 비트 가 모든 바 이 너 리 수 를 다 옮 겨 다 녔 다 면, 가장 높 은 비트 가 모든 진 수 를 옮 겨 다 닐 때 까지 다시 삭 제 됩 니 다.
프로그램 은 다음 과 같 습 니 다:
package com.majing.test;
public class test1 {
public static void main(String[] args)
{
print(3,2);
}
private static int[] array=null;
public static void print(int n,int b)
{
assert n>0 && b>1;
if(null==array)
{
array=new int[n];
}
print(n,n,b);
}
public static void print(int n,int cur,int b)
{
if(cur<=0)
{
for(int i=n-1;i>=0;i--)
{
System.out.print(array[i]);
}
System.out.println();
return;
}
for(int i=0;i<b;i++)
{
array[cur-1]=i;
print(n,cur-1,b);
}
}
}
테스트 결 과 는 다음 과 같다.
000
001
010
011
100
101
110
111
(2) N 개 수 를 정 하고 N 개 수의 전체 배열 을 출력 합 니 다 (N 개 수 는 각각 다 릅 니 다)
이 문제 에 대해 우 리 는 재 귀적 인 방식 으로 구 해 를 할 수 있다. 이 N 개 수 를 크기 가 N 인 배열 에 저장 하고 N 개의 수의 전체 배열 에 대해 우 리 는 이 를 N - 1 개의 수의 전체 배열 로 축소 할 수 있다. 구체 적 인 방법 은 이 N 개 수 를 모두 첫 번 째 숫자 와 교환 하 는 것 이다 (물론 첫 번 째 수 는 교환 할 필요 가 없다. 그들 둘 이 겹 치기 때문이다).예 를 들 어 1 과 2, 1 과 3,..............................................................................
프로그램:
/**
* [1-n] N
*/
private static int[] arrayfull={1,2,3,4};
public static void printfull(int[] array)
{
assert array!=null && array.length!=0;
printfull(arrayfull,arrayfull.length,0);
}
private static void printfull(int[] array,int n,int cur)
{
if(cur==n)
{
System.out.println(Arrays.toString(arrayfull));
return;
}
for(int i=cur;i<n;i++)
{
swap(arrayfull,cur,i);
printfull(arrayfull,n,cur+1);
swap(arrayfull,cur,i);
}
}
private static void swap(int[] array,int i,int j)
{
int tmp=array[i];
array[i]=array[j];
array[j]=tmp;
}
실행 결 과 는 다음 과 같 습 니 다.
[1, 2, 3, 4]
[1, 2, 4, 3]
[1, 3, 2, 4]
[1, 3, 4, 2]
[1, 4, 3, 2]
[1, 4, 2, 3]
[2, 1, 3, 4]
[2, 1, 4, 3]
[2, 3, 1, 4]
[2, 3, 4, 1]
[2, 4, 3, 1]
[2, 4, 1, 3]
[3, 2, 1, 4]
[3, 2, 4, 1]
[3, 1, 2, 4]
[3, 1, 4, 2]
[3, 4, 1, 2]
[3, 4, 2, 1]
[4, 2, 3, 1]
[4, 2, 1, 3]
[4, 3, 2, 1]
[4, 3, 1, 2]
[4, 1, 3, 2]
[4, 1, 2, 3]
(3) N 개 수 에 대해 이 N 개 수의 전체 배열 을 구하 십시오. (숫자 는 중복 할 수 있 습 니 다)
이 문제 에 대해 저 는 위의 문제 보다 더 쉽다 고 생각 합 니 다. 모든 숫자 에 대해 가능 한 값 을 모두 옮 겨 다 니 면 됩 니 다. 여기 서 우 리 는 여전히 재 귀적 인 방식 을 사용 합 니 다.
프로그램:
/**
* N ,
*/
private static int[] arrayfull2={1,2,3};
public static void printfull2(int[] array)
{
assert array!=null && array.length!=0;
int[] arr=new int[array.length];
printfull2(array,arr,arrayfull2.length,0);
}
private static void printfull2(int[] array,int[] arr,int n,int cur)
{
if(cur==n)
{
System.out.println(Arrays.toString(arr));
return;
}
for(int i=0;i<n;i++)
{
arr[cur]=array[i];
printfull2(arrayfull2,arr,n,cur+1);
}
}
실행 결과:
[1, 1, 1]
[1, 1, 2]
[1, 1, 3]
[1, 2, 1]
[1, 2, 2]
[1, 2, 3]
[1, 3, 1]
[1, 3, 2]
[1, 3, 3]
[2, 1, 1]
[2, 1, 2]
[2, 1, 3]
[2, 2, 1]
[2, 2, 2]
[2, 2, 3]
[2, 3, 1]
[2, 3, 2]
[2, 3, 3]
[3, 1, 1]
[3, 1, 2]
[3, 1, 3]
[3, 2, 1]
[3, 2, 2]
[3, 2, 3]
[3, 3, 1]
[3, 3, 2]
[3, 3, 3]
(4) 미 완성 계속...
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.