iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 22
1
自我挑戰組

從0開始,一起學C語言吧!系列 第 22

從0開始,一起學C語言吧!(Day22)

  • 分享至 

  • xImage
  •  

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");
}

印出:
https://ithelp.ithome.com.tw/upload/images/20190922/20119958DbVBByuBMK.png
解釋:
定義遊戲的區間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);
	}
}

印出:
https://ithelp.ithome.com.tw/upload/images/20190922/20119958mFTMttIhRo.png
解釋:
河內塔遊戲是典型的遞迴函式練習題,解題方式;
首先思考,當一個迴圈時可直接將圓環從tower a移至tower b,那當圓環有n個時,把n-1圓環透過tower c移至tower b之後將tower a終最後一個圓環移至tower c,再將tower b終的n-1的圓環透過a移至c。

謝謝大家今天的閱讀


上一篇
從0開始,一起學C語言吧!(Day21)
下一篇
從0開始,一起學C語言吧!(Day23)
系列文
從0開始,一起學C語言吧!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言