蓝桥杯day3

第三十九级台阶:
小明刚刚看完电影《第39级台阶》,离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级!站在台阶前,他突然又想着一个问题:
如果我每一步只能迈上1个或2个台阶,先迈左脚,然后左右交替,最后一步是迈右脚,也就是说一共要走偶数步。那么,上完39级台阶,有多少种不同的上法呢?
请你利用计算机的优势,帮助小明寻找答案。要求提交的是一个整数。

题解:要注意递归的出口条件为n>=39,但是只有当n==39时,才能进行判断步数是否为2及counter加一操作。所以在不确定时应该询问考场老师。

前缀判断:
如下的代码判断needle_start指向的串是否为haystack_start指向的串的前缀,如不是,则返回NULL。比如:"abcd1234"就包含了"abc"为前缀。

char *prefix(char *haystack_start,char *needle_start)
{ 
	char *haystack=haystack_start;
	char *needle=needle_start;
	while(*haystack&&*needle)
	{
		if(_____________________) return NULL;  //填空位置
	}
	if(*needle) return NULL;
	return haystack_start;
}

答案:(haystack++)!=(needle++)

三部排序:
一般的排序有许多经典算法,如快速排序、希尔排序等。但实际应用时,经常会或多或少有一些特殊要求。我们没必要套用那些经典算法,可以根据实际情况建立更好的解法。
比如,对一个整型数组中的数字进行分类排序:使得负数都靠左端,正数都靠右端,0在中部。注意问题的特点是:负数区域和正数区域内并不要求有序。可以利用这个特点通过1次线性扫描就结束战斗!
以下的程序实现了该目标。其中x指向待排序的整型数组,len是数组的长度。

#include <stdio.h>
void sort3p(int *x,int len)
{ 
	int p=0;
	int left=0;
 	int right=len-1;
 	int t;
 	while(p<=right)
    { 
    	if(x[p]<0)
        { 
        	t=x[left];  x[left]=x[p];  x[p]=t;  left++;  p++; 
       	}
	  	else if(x[p]>0) 
	  	{ 
	  		t=x[right];  x[right]=x[p];  x[p]=t;  right--; 
	  	}
		else 
		{ 
			_______________________//填空位置
		}
	}
}


答案:p++

*后面的两题都用到了指针:char s,int x。这里面两者都可以支持s[i]或者(s++)两种寻址方式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值