吉大學碩複試-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