양 휘 삼각형 - 대열 의 응용
의 사상 을 사용 하여 양 휘 삼각형 의 절 차 를 실현 한다.
1 > 우선, 하나의 대기 열 을 초기 화해 야 합 니 다. 즉, 머리 = 꼬리 = 0 입 니 다.
2 > 첫 번 째 줄 의 요 소 를 1 로 줄 에 넣 고 두 번 째 줄 을 조작 합 니 다 (1, 2 줄 은 요구 와 조작 이 필요 없 이 요 소 를 직접 줄 에 넣 으 면 됩 니 다).
3 > 세 번 째 줄 부터 현재 의 대 두 는 N - 1 줄 을 가리 키 며 각 줄 의 고정 요 소 를 1 줄 로 정렬 한 다음 에 순환 작업 구 와 과정 을 반복 합 니 다.
팀 의 첫 번 째 요 소 를 팀 에서 내 고 값 temp 을 저장 합 니 다.
현재 팀 의 첫 번 째 요소 x 를 가 져 오고 temp = temp + x 를 진행 하 며 temp 을 파티 에 가입 합 니 다.
4 > 순환 이 끝 난 후, 팀 의 첫 번 째 는 N - 1 줄 의 마지막 요소 에 있 습 니 다. 현재 팀 에서 나 온 다음, 각 줄 의 마지막 고정 요소 1 을 팀 에 넣 습 니 다.
5 > 3, 4 단 계 를 순환 하면 양 휘 삼각형 을 출력 할 수 있다.
주의: 양 휘 삼각형 의 특징 은 N 줄 의 중간 값 이 N - 1 줄 의 두 값 과 같 고 대열 은 단 진 단 출 을 사용 하 는 것 입 니 다.
//
#include "stdafx.h"
#include<stdio.h>
#define MAXSIZE 50
#define FALSE 0
#define TRUE 1
typedef int QueueElemType;
typedef struct
{
QueueElemType element[MAXSIZE];
int front;//
int rear;//
}SeqQueue;
void InitQueue(SeqQueue *Q)//
{
Q->front = Q->rear = 0;
}
int EnterQueue(SeqQueue *Q, QueueElemType x)//
{
if ((Q->rear + 1) % MAXSIZE == Q->front)///
return FALSE;
Q->element[Q->rear] = x;
Q->rear = (Q->rear + 1) % MAXSIZE;
return TRUE;
}
int DelQueue(SeqQueue *Q, QueueElemType *x)//
{
if (Q->front == Q->rear)
return FALSE;
*x = Q->element[Q->front];
Q->front = (Q->front + 1) % MAXSIZE;
return TRUE;
}
int GetHead(SeqQueue *Q, QueueElemType *x)//
{
if (Q->front == Q->rear)
return FALSE;
*x = Q->element[Q->front];
return TRUE;
}
int IsEmpty(SeqQueue *Q)
{
if (Q->rear == Q->front)
return TRUE;
else
return FALSE;
}
// ,N
void YangHuiTriangle(int N)
{
int n, i, x, temp;
SeqQueue Q;
InitQueue(&Q);
EnterQueue(&Q, 1);//
for (n = 2; n <= N; n++)
{
EnterQueue(&Q, 1);//
for (i = 1; i <= n - 2; i++)
{
DelQueue(&Q, &temp);// temp
printf("%d ", temp);
GetHead(&Q, &x);
temp = temp + x;
EnterQueue(&Q, temp);
}
DelQueue(&Q, &x);//
printf("%d ", x);
EnterQueue(&Q, 1);
printf("
");
}
while (!IsEmpty(&Q))
{
DelQueue(&Q, &x);
printf("%d ", x);
}
}
void main()
{
int N;
printf("please input the N:");
scanf("%d", &N);
YangHuiTriangle(N);
printf("
");
}
다음은 인터넷 에서 찾 은 사고 이 고 참고 할 수 있 습 니 다.
대기 열 을 사용 하여 이 문 제 를 해결 하 는 데 는 작은 기술 이 있 습 니 다. 두 개의 1 의 양쪽 에 0 을 두 개 추가 하고 0 을 통 해 이 층 의 끝 을 표시 합 니 다.즉: 0 1 0 (양 휘 삼각형 의 첫 줄, 우 리 는 첫 줄 에서 시작) 0 1 0
1 1
1 2 1 1 3 3 1 1 4 6 4 1
프로그램 은 다음 과 같 습 니 다:
//
void printQueue(Queue *q)
{
for(int i = 0; i < Qlength(q);++i)
printf("%d ",q->data[(q->front+i+q->Qsize)%q->Qsize]);
printf("
");
}
// n
void YangHuiTriangle(int n)
{
int level = n;
//printf(" ");
Queue myQueue;
initQueue(&myQueue,level);
// : 0
enQueue(&myQueue,0);
enQueue(&myQueue,1);
enQueue(&myQueue,1);
enQueue(&myQueue,0);
int x,y;
for(int m = 1;m < level;++m)
{
do{
// ,
deQueue(&myQueue,&x);
getHead(&myQueue,&y);
enQueue(&myQueue,x+y);
}while(y!=0);
//
enQueue(&myQueue,0);
}
printQueue(&myQueue);
}
이 방법 은 매우 교묘 하 다. 먼저 요 소 를 팀 에서 내 보 낸 다음 에 뒤의 요 소 를 얻 은 다음 에 두 사람 을 더 한 후에 팀 에 들 어가 이 일 을 0 을 만 날 때 까지 반복 한다.이 0 은 이전 대기 열 이 끝 난 0 이자 이 대기 열 이 시작 한 0 이다.
。
마지막 으로 C + + 양 휘 삼각형 을 실현 하 는 코드 를 동봉 합 니 다.
// C++
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
int i,j,t;
int a[11][11];
// 1
for(i=1;i<11;i++)
{
a[i][1]=1;
a[i][i]=1;
}
for(i=1;i<11;i++)
{
if(i>=3)
{
for(t=2;t<i;t++)
{
a[i][t]=a[i-1][t-1]+a[i-1][t];
}
}
}
for(i=1;i<11;i++)
{
for(j=1;j<=i;j++)
{
cout<<a[i][j]<<" ";
}
cout<<endl;
}
return 0;
}<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span>
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.