Day22-練習範例
那今天我們繼續做main()函式的引數的範例吧!!
範例1: 終級密碼
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
void game(int ,int,int);
int main(void){
int answer;
int left=1,right=10;
srand(time(NULL));
answer=rand( )%10;
while(1){
int guess;
printf("目前範圍 %d~ %d,請猜:",left,right);
scanf("%d",&guess);
if(guess>right||guess<left)
exit(1);
if(guess==answer)
break;
else{
if(guess>answer)right = guess;
else left=guess;
}
}
printf("你猜對了\n");
system("pause");
}
印出:
解釋:
定義遊戲的區間left值設為1,right 值設為10
srand(time(NULL));產生亂數的意思
第10行使用到while迴圈,值到猜到終級密碼guess==answer,才離開迴圈
範例2:河內塔遊戲
有三根杆子A,B,C。A杆上有 N 個 (N>1) 穿孔圓盤,盤的尺寸由下到上依次變小。要求按下列規則將所有圓盤移至 C 杆:每次只能移動一個圓盤;大盤不能疊在小盤上面。
#include<stdio.h>
#include<stdlib.h>
void cmove(int ,char,char,char);
int main(void){
int n;
scanf("%d",&n);
cmove(n,'a','b','c');
system("pause");
}
void cmove (int n,char a,char b, char c){
static int times=0;
if(n==1){
times++;
printf("%d times:Move %d from tower %c to %c\n",times,1,a,c);
}
else{
cmove(n-1,a,c,b);
times++;
printf("%d times: Move %d from tower %c to %c\n",times,n,a,c);
cmove(n-1,b,a,c);
}
}
印出:
解釋:
河內塔遊戲是典型的遞迴函式練習題,解題方式;
首先思考,當一個迴圈時可直接將圓環從tower a移至tower b,那當圓環有n個時,把n-1圓環透過tower c移至tower b之後將tower a終最後一個圓環移至tower c,再將tower b終的n-1的圓環透過a移至c。
謝謝大家今天的閱讀