首先我们说一下今天的安排,我先重温了一遍数组,之后为大家解释一下今天的真题,最后把昨天遗留的问题给你们补充一下。
数组
一维数组
同类元素的集合,称为数组。
定义方式:
数据类型 数组名 [常量表达式];
举例:
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;
}
结果是: