算法经典问题(一)

求阶梯数

在你面前有一条长长的阶梯,如果你每次跨两阶,那么最后剩余一阶,如果你每次跨三阶,那么最后剩两阶,如果你每次跨5阶最后剩4阶,如果你每次跨6阶,最后剩余5阶,只有当你每次跨7阶,才正好到头,这个楼梯到底有多少阶,

分析,因为每次跨7阶,才正好到头,说明楼梯的阶数是7的倍数

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+甲=井深,求甲、乙、丙、丁、戌各家绳子的长度和井深。

分析 设井深为len,甲的绳长 len1,乙的绳长 len2,丙的绳长 len3,丁的绳长 len4,戌的绳长len5

由条件可得  len1*2+len2 = len

                    len2*3+len3 = len

                    len3*4+len4 = len

                    len4*5+len5 = len

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

 

 

转载于:https://my.oschina.net/kakoi/blog/540409

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值