1. 程式人生 > >吉大學碩複試-2017年

吉大學碩複試-2017年

回憶版

1、已知π/4≈1-1/3+1/5-......,表示式為(-1)^(i-1)/(2i-1),求π的近似值,誤差小於10^-5

#include<stdio.h>  
#include<math.h>  
#define N 100
int main(){
	double PIvalue();
	double PI = PIvalue();
	printf("π的值近似為:%f\n",PI);
    return 0;
}
double PIvalue(){
	double Pi = 0;
	int i=1;
	double item=1;
	while(fabs(item)>1e-5){//誤差小於10^-5
		if(i%2!=0)
			Pi += item;
		else 
			Pi -= item;
		i++;
		item = 1 / (double)(2 * i - 1);
	}
	return Pi*4;
}

當把while迴圈條件改成>1e-7,即誤差小於10^7,結果肥腸接近π值:


2、一個序列,有素數和非素數,要求排序,使所有素數位於非素數之前,相對位置不變。

注意:函式返回陣列,要用到指標

#include<stdio.h>  
#include<stdbool.h>
#include <time.h>
#define N 15
int main(){
	int* sort(int A[]);
	bool isPrime(int x);
	int A[N],i;
	srand(time(NULL));//種子,若不新增,再次執行的隨機數不變 
	for(i=0;i<N;i++){
		A[i] = rand()%10+1;//隨機生成1-10的數
		printf("%d\t",A[i]); 
	}
	int *B=sort(A);
	printf("\n排序後為:\n");
	for(i=0;i<N;i++){//將新的順序賦給陣列A 
		A[i] = B[i];
		printf("%d\t",A[i]); 
	}
		
	
	
    return 0;
}
/*按題要求排序排序*/
int* sort(int A[]){
	int *B=(int *)malloc(sizeof(int)*N);;
	int i,j;
	int is_prime=0,not_prime=0;
	for(i=0;i<N;i++){
		if(isPrime(A[i])){
			for(j=not_prime;j>=is_prime;j--)
				B[j] = B[j-1];
			B[is_prime] = A[i];
			not_prime++;
			is_prime++;
		}else{
			B[not_prime] = A[i];
			not_prime++;
		}
	}
	return B;
}
/*判斷x是否為素數,是返回true,不是返回false*/
bool isPrime(int x){
	int i;
	bool is_prime=true;
	for(i=2;i<=sqrt(x);i++)
		if(x%i == 0){
			is_prime = false;
			break;
		}
	return is_prime;
} 


3、編寫完整的函式,輸入正整數N和D,如果N/D為無限迴圈小數,輸出時小數點後面的第一個迴圈節用括號括起來,不顯示後面的迴圈;不為迴圈小數則正常顯示。(25分)

例如:3/4=0.75;5/6=0.8(3);10/3=3.(3)

答案:

http://mp.blog.csdn.net/postedit/79463648

4、有N個正方形,邊長對應斐波那契值,將這些正方形拼成一個長方形,求長和寬以及每個正方形左下角點座標

思路:題目是這個意思:



左下角點座標分別為:(座標系建立不唯一,故點座標不唯一,但長方形的長寬是唯一的)(a為邊長長度,也是斐波那契數列:1,1,2,3,5,8,13,21,34....)

第1個正方形:a=1(0,1)長方形的長:1寬:1

第2個正方形:a=1(1,1)長方形的長:2寬:1

第3個正方形:a=2(0,3)長方形的長:3寬:2

第4個正方形:a=3(2,3)長方形的長:5寬:3

第5個正方形:a=5(0,8)長方形的長:8寬:5

第6個正方形:a=8(5,8)長方形的長:13寬:8

第7個正方形:a=13(0,21)長方形的長:21寬:13

第8個正方形:a=21(13,21)長方形的長:34寬:21

規律應該很容易看出來了,

長寬:各自構成了斐波那契數列,長是從第二位開始

點座標:第i個正方形,若i是奇數,則x=0,y=長;若i是偶數,則x=上一個正方形構成的寬,y=上一個的長

由此,可以建立四位陣列:Fibonacci[N][4],第一位存寬,其餘均可有寬推出

#include<stdio.h>  
int main(){
	void fibonacci(int n);
	int n;
	printf("請輸入正方形個數:"); 
	scanf("%d",&n);
	fibonacci(n);
    return 0;
}
void fibonacci(int n){
	int Fibonacci[n][4];//第一位寬,第二位長,第三位x,第四位y 
	int i;
	/**初始化**/ 
	Fibonacci[0][0] = 1;
	Fibonacci[1][0] = 1;
	Fibonacci[0][1] = 1;
	Fibonacci[1][1] = 2;
	Fibonacci[0][2] = 0;
	Fibonacci[1][2] = 1;
	Fibonacci[0][3] = 1;
	Fibonacci[1][3] = 1;
	/**依次按規律賦值**/
	for(i=2;i<n;i++){
		Fibonacci[i][0] = Fibonacci[i-1][0] + Fibonacci[i-2][0];
		Fibonacci[i][1] = Fibonacci[i-1][1] + Fibonacci[i-2][1];//長寬都是斐波那契數列,第i位等於第i-1,i-1位之和 
		if(i%2==0){
			Fibonacci[i][2] = 0;//x=0 
			Fibonacci[i][3] = Fibonacci[i][1];//y=長 
		}else{
			Fibonacci[i][2] = Fibonacci[i-1][0];//x=上一個寬 
			Fibonacci[i][3] = Fibonacci[i-1][1];//y=上一個長 
		}
	}
	printf("%d個正方形構成的長方形的長為:%d,寬為:%d,\n這些正方形左下角的座標依次為:\n",n,Fibonacci[n-1][1],Fibonacci[n-1][0]);
	for(i = 0;i<n;i++){
		printf("第%d個正方形的左下角座標為:(%d,%d)\n",i+1,Fibonacci[i][2],Fibonacci[i][3]);
	}
	
}

5、用四種顏色給地圖著色,要求相鄰塊顏色不同,圖用矩陣儲存,求所有著色方案。

在另一篇中已寫過了:http://blog.csdn.net/qq_21149391/article/details/79507153