마름모꼴과 피보나치 수열을 인쇄하는 몇 가지 해법

2665 단어
1, 프로그램 작성, 인쇄 * 마름모꼴
 
i행에서 인쇄할 공백 개수와 *번 개수를 내놓고 for순환으로 각 줄을 순서대로 인쇄합니다
#include<stdio.h>

// 2*n-1 , 
void print1(int n)
{
	int i,j;
	for(i=1;i<=n;i++){// 1 n 
		for(j=1;j<=n-i;j++)// n-i 
    		printf(" ");
		for(j=1;j<=2*i-1;j++)// 2*i-1 * 
			printf("*");
    	printf("
"); } for(;i<2*n;i++){// n+1 2*n-1 , (2*n-i) for(j=1;j<=n-(2*n-i);j++) printf(" "); for(j=1;j<=2*(2*n-i)-1;j++) printf("*"); printf("
"); } } void main() { int n;//n * printf("enter n:"); scanf("%d",&n); print1(n); }

 
2. 피보나치 수열(Fibonacci Sequence)은 황금분할 수열이라고도 하는데 이런 수열을 가리킨다.
1, 2, 3, 5, 8, 13, 21,...수학에서 피보나치 수열은 다음과 같이 귀속된 방법으로 정의된다. F(0)=0, F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2, n∈N*).프로그램을 작성하여 F (20) 의 값을 출력합니다.
 
여기에 네 가지 다른 해법을 제시하는데 귀속과 개선된 귀속 효율에 있어 큰 차이가 있다.
#include<stdio.h>
#include<math.h>
#include<time.h>

#define MAX 100
// 
int f1(int n)
{
	if(n==1 || n==0)
		return 1;
	return f1(n-1)+f1(n-2);
}

// , 
int f2(int n)
{
	// 
	static result[MAX]={1,1};
	if(n==1 || n==0)
		return 1;
    if(result[n-1] == 0)
		result[n-1]=f2(n-1);
	if(result[n-2] == 0)
		result[n-2]=f2(n-2);
	return result[n-1]+result[n-2];
}

// ( )
int f3(int n)
{
    int a[MAX],i;
	a[1]=1;
	a[0]=1;
	for(i=2;i<=n;i++)
		a[i]=a[i-1]+a[i-2];
	return a[n];
}

// 
int f4(int n)
{
    int i=2,a=1,b=1,sum=1;
	while(i<=n){
       sum=a+b;
	   a=b;
	   b=sum;
	   i++;
	}
	return sum;
}


void main()
{
	long start,end;
	start=clock();
	printf("f(40)==%d
",f1(40)); end=clock(); printf(" :%d ms
",end-start); start=clock(); printf("f(40)==%d
",f2(40)); end=clock(); printf(" :%d ms
",end-start); start=clock(); printf("f(20)==%d
",f3(20)); end=clock(); printf(" :%d ms
",end-start); start=clock(); printf("f(20)==%d
",f4(20)); end=clock(); printf(" :%d ms
",end-start); }

실행 결과:
 

좋은 웹페이지 즐겨찾기