备战蓝桥杯第二天——数组【第39级台阶】

首先我们说一下今天的安排,我先重温了一遍数组,之后为大家解释一下今天的真题,最后把昨天遗留的问题给你们补充一下。

数组

一维数组
同类元素的集合,称为数组。

定义方式:
数据类型 数组名 [常量表达式];
举例:
int a[5];
float score[8];
double d[10];
char name[256];

初始化:

方式一: int	a[3];
		a[0] = 1;
		a[1] = 2;
		a[2] = 3;
方式二:int	b[5] = { 1, 2, 3, 4, 5};		//省略写法
方式三:float	score[8] = { 1.0 ,1.2};		//后面未赋值则为零
方式四:char	name[ ] =  “Alan”;			//省略写法,单独定义时必须声明大小

示例:
/一维数组的遍历/

#include<stdio.h>

main()
{
	int a[8] = { 1, 1, 2, 3, 5, 8, 13, 21};
	int i;
	for(i = 0; i < 8; i++)
	{
		printf("%d ", a[i]);
	}
	
	return 0;
}

结果如下:
在这里插入图片描述

说明:一维数组是由编号0开始的,即a[0]=1,a[0]表示数组里的第一个数,依次往后推,上面的示例只到a[7],即a[7]=21,a[7]表示数组里的第八个数。

一维数组的运用:查找最大数与最小数,即对数组进行遍历。

#include<stdio.h>

main()
{
	int	a[8] = {80, 90, 85, 84, 70, 76, 75, 83};
	int i,min = 100, max = 0;
	
	for(i = 0; i < 8; i++)
	{
		if(a[i] > max)
			max = a[i];
		else if(a[i] < min)
			min = a[i];
	}
	printf("最大值为:%d\n最小值为:%d", max, min);
}

二维数组
存储数组的数组,叫做二维数组。
a[3][5]表示三行五列。
定义:
数据类型 数组名 [常量表达式] [常量表达式];
初始化:
1) 分段赋值
int grade[2][3] = { {80, 75, 92} , { 61, 65, 71} };
2) 连续赋值
int a[2][3] = { 80, 75, 92 , 61, 65, 71 };
3) 连续省略赋值
int des[][3] = { 1, 2, 3, 4, 5, 6, 7, 8, 9}; //三个数为一组,如果最后不够三个,自动补0
示例:
/表示四个学生的三科成绩,查找不及格的学生和科目/

#include<stdio.h>

int main()
{
	int grade[4][3] = {82, 77, 76,  90, 87, 56,
				    87, 48, 75,  86, 86, 66};
	int i,j;
	
	for(i = 0; i < 4; i++)
	{
		for(j = 0; j < 3; j++)
		{
			if(grade[i][j]<60)
			printf("第%d个学生第%d科不及格\n",i+1, j+1);
		}
	}
	return 0;
}

结果:
在这里插入图片描述

第39级台阶

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

我的解题思路:
我采用交替使用的方法,先左脚后右脚,左脚可以是1步也可是2步,总之步数除以2为零即可,所以我想用递归的方法。

具体是先左脚后右脚各1步,看能否满足步数为偶数的条件,依次类推,即为递归的算法。
每次有两种选择,共有39阶台阶,即理论上共有2的39次方种走法,然而要满足步数为偶数的条件,肯定要小于2的39次方。

我的解题方法

#include<stdio.h>
int num=0;//方案数 

void fun(int n,int step)//n表示有多少台阶数 ,step表示步数
{
  if(n<0)
    return;
  if(n==0)
  {
    if(step%2==0) num++;
    return;
   }
   fun(n-1,step+1);
   fun(n-2,step+1);
}

int main()
{
  fun(39,0);
  printf("%d",num);
}

结果为:51167078

昨日遗留

昨天答应大家将《马虎的算式》的各种情况打印出来,今天我就将程序和结果都呈现给大家。

#include<stdio.h>

int main()
{
 int s=0;
for(int a=1;a<10;a++)
 {
  for(int b=1;b<10;b++)
  {
   //if(a!=b)
   for(int c=1;c<10;c++)
   {
	//if(c!=b&&c!=a)
	for(int d=1;d<10;d++)
	{
	// if(d!=a&& d!=b &&d!=c)
	 for(int e=1;e<10;e++)
	{
	  if(e!=a&& e!=b && e!=c &&e!=d&&d!=a&& d!=b &&d!=c&&c!=b&&c!=a&&a!=b)
	  {
	   if((a*10+b)*(c*100+d*10+e)==(a*100+d*10+b)*(c*10+e))
	   {
	   printf("%1d*%1d+%1d*%1d\n",a*10+b,c*100+d*10+e,a*100+d*10+b,c*10+e);
	   s++;
	   }
	  }
	 }
	}
   }
   
  }
 }
 printf("%d",s);
 return 0;
}

结果是:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值