루프를 사용하여 숫자 패턴 인쇄
5 5 5 5 5 5 5 5 5
5 4 4 4 4 4 4 4 5
5 4 3 3 3 3 3 4 5
5 4 3 2 2 2 3 4 5
5 4 3 2 1 2 3 4 5
5 4 3 2 2 2 3 4 5
5 4 3 3 3 3 3 4 5
5 4 4 4 4 4 4 4 5
5 5 5 5 5 5 5 5 5
변수(n, 열, 행)를 기반으로 특정 숫자를 계산하기 위해 수학 함수를 보간하려고 했기 때문에 솔직히 두통이 생겼습니다.
내가 마침내 생각해낸 해결책은 각 행(왼쪽에서 오른쪽으로)을 n*2-1 요소의 배열로 간주하고 전체 패턴을 n*2-1 행(위에서 아래로)의 가상 다중 희미한 배열로 간주합니다. 실제로 multi-dim 배열을 생성하지 않기 때문에 허구입니다. 이는 n*2-1이 각 행(배열)의 길이임을 의미합니다.
첫 번째 행은 n+1로 초기화됩니다. 그런 다음 행 0에서 길이까지 각 반복에서 인덱스 행에서 역 인덱스 길이-행까지의 배열 요소가 조작됩니다(감소 및 증가). 즉, 행 0의 첫 번째 반복에서 인덱스 0에서 9-0 사이의 요소가 감소합니다. 어레이가 n+1로 초기화된 이유입니다. 두 번째 반복에서는 인덱스 1에서 9-1 사이의 요소가 감소합니다. 인덱스 4의 중간점이 다섯 번째 행 이후에 전달될 때까지 계속됩니다. 그런 다음 연산이 역순으로 이루어지고 인덱스 length-row to row 사이의 요소가 증가합니다.
int main() {
int n = 5;
int length = (n*2)-1;
int numbers[length];
// initialize array row with n+1
for (int i = 0; i < length; i++) {
numbers[i] = n+1;
}
// iterate through all rows
for(int row = 0; row < length; row++) {
// decrement elements until midpoint
for(int i = row; i < (length-row); i++) {
numbers[i] -= 1;
}
// increment elements after midpoint
for(int i = (length-row); i < row; i++) {
numbers[i] += 1;
}
// print current array row
for(int i = 0; i < length; i++) {
printf("%d ", numbers[i]);
}
// print line break
printf("\n");
}
return 0;
}
나는 원래 프로그래밍 언어 학습의 일환으로 C로 질문을 해결했습니다. 여기서 대화형 솔루션을 제시하기 위해 TypeScript로 변환했지만 알고리즘은 기본적으로 동일합니다.
이 문제에 대한 다른 솔루션이나 내 솔루션에 대한 개선 사항이 있는지 알고 싶습니다.
Reference
이 문제에 관하여(루프를 사용하여 숫자 패턴 인쇄), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/zirkelc/print-number-pattern-using-loops-3c5l텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)