算法經典問題(一)

求階梯數函數

在你面前有一條長長的階梯,若是你每次跨兩階,那麼最後剩餘一階,若是你每次跨三階,那麼最後剩兩階,若是你每次跨5階最後剩4階,若是你每次跨6階,最後剩餘5階,只有當你每次跨7階,才正好到頭,這個樓梯到底有多少階,spa

分析,由於每次跨7階,才正好到頭,說明樓梯的階數是7的倍數code

int main(){
            ladder = 7;
        while(1){
          if((ladder%2==1)&&(ladder%3==2)&&(ladder%5==4)&&(ladder%6==5)&&(ladder%7==0)){
                  printf("最少須要%d",ladder);
                  break;          
          }      
          ladder+=7;
        }
}

五家共井遞歸

如今有五家共用一口井,甲、乙、丙、丁、戌五家各有一條繩子汲水(下面用文字表示每一家的繩子):甲×2+乙=井深,乙×3+丙=井深,丙×4+丁=井深,丁×5+戌=井深,戌×6+甲=井深,求甲、乙、丙、丁、戌各家繩子的長度和井深。it

分析 設井深爲len,甲的繩長 len1,乙的繩長 len2,丙的繩長 len3,丁的繩長 len4,戌的繩長len5while

由條件可得  len1*2+len2 = lenco

                    len2*3+len3 = lenbackground

                    len3*4+len4 = lenreturn

                    len4*5+len5 = lenprintf

                    len5*6+len1 = len

依次把len1,len2,len3,len4,len5表明的繩長求出

                    len1 = len2+len3/2

                    len2 = len3+len4/3

                    len3 =len4+len5/4

                    len4 = len5+len1/5

int main() {
	int len1, len2, len3, len4, len5, len, flag;
	flag = 1;
	len5 = 0;
	while (flag)
	{
		len5 += 4;
		len1 = 0;
		while (flag)
		{
			len1 += 5;
			len4 = len5 + len1 / 5;
			len3 = len4 + len5 / 4;
			if (len3 % 2) {
				continue;
			}
			if (len4 % 3) {
				continue;
			}
			len2 = len3 + len4 / 3;
			if (len2 + len3 / 2 < len1)
				break;
			if (len2 + len3 / 2 == len1)
				flag = 0;
		}	
	}
	len2 = 2 * len1 + len2;
	printf("長度爲\n");
	printf("甲長度爲%d\n",len1);
	printf("乙長度爲%d\n",len2);
	printf("丙長度爲%d\n",len3);
	printf("丁長度爲%d\n",len4);
	printf("戊長度爲%d\n",len5);
	system("PAUSE");
	return 0;
}

 

雞兔同籠

「今有雞兔同籠,上有三十五頭,下有94足,問雞兔各幾何」

分析:雞有兩隻腳,兔子有四隻腳,所以可得二元一次方程組

    設雞爲X,兔子爲Y

                            X + Y = 35

                            2X + 4Y = 94

int main(){

        int head,foot,chook,rabbit;
        printf("請輸入雞和兔子的頭和腳數\n");
        scanf("%d%d",&head,&foot);
        for(chook =0;chook<=head;chook++){
                
        rabbit = head-chook;
        if(chook*2+rabbit*4==foot){
                    printf("雞的數量:%d,兔子的數量%d",chook,rabbit);
            }
        }



}

 

猴子吃桃問題

一隻猴子摘了一堆桃子它天天吃了其中的一半而後在多吃了一個,直到第十天,他發現只有一個桃子了,問第一天摘了多少個桃子

分析:a10 = 1

       a9=(a10+1)*2

        a8 =(a9 +1 )*2

        ........

咱們使用遞歸函數來計算這種推算的問題

int peach(int n) {
	if (n == 1)
		return 1;
	else
		return (peach(n - 1) + 1) * 2;    //前一天比後一天多一倍+1
}
int main() {
	int days, sum;
	printf("請輸入天數\n");
	scanf("%d", &days);
		sum = peach(days);
		printf("%d", sum);
	system("PAUSE");
	return 0;
}
相關文章
相關標籤/搜索