数据结构与算法coding(1)

目录

一、刷题ing

1、梯形面积

2、牛吃牧草(数学问题)

3、格式控制

4、拆分位数

5、陶陶摘苹果

二、数据结构与算法


一、刷题ing

1、梯形面积

题目描述:

在梯形中阴影部分面积是150平方厘米,求梯形面积。

输出格式

输出梯形面积(保留两位小数)。

#include<stdio.h>

//阴影面积150平方厘米,求梯形面积 
//阴影部分为三角形 
int main(){
	double area(double h,double d1,double d2);
	double d1 = 15;
	double d2 = 25;
	double h = 150 * 2 / d1;
	printf("%.2f\n",area(h,d1,d2));
}
double area(double h,double d1,double d2){
	double S = (d1 + d2) *h / 2; 
	return S;
}

2、牛吃牧草(数学问题)

题目描述:

有一个牧场,牧场上的牧草每天都在匀速生长,这片牧场可供15头牛吃20天,或可供20头牛吃10天,那么,这片牧场每天新生的草量可供几头牛吃1天?

输出格式

如题所述,牛的数量。

#include<stdio.h>
//每天新生的草量:newNum
//牧场原本的草量:origin
//一头牛每天能吃的草量:eatNum
/*
origin + newNum * 20 = eatNum * 300
origin + newNum * 10 = eatNum * 200 
最终得出:newNum = 10 * eatNum 即
每天新生的草量可供十头牛吃一天 
*/
 
int main(){
	printf("10");	
}

3、格式控制

题目描述

依旧是输入三个整数,要求按照占8个字符的宽度,并且靠左对齐输出

输入格式

一行三个整数,空格分开

输出格式

输出它们按格式输出的效果,占一行

样例输入

123456789 -1 10

样例输出

123456789-1      10      

#include<stdio.h>

int main(){
	int a,b,c;
	scanf("%d%d%d",&a,&b,&c);
	printf("%-8d%-8d%-8d",a,b,c);
}

“%-8d”是C语言中printf函数的格式化字符串的一部分,用于控制输出整数的格式。具体含义如下:

  • “%d”表示输出一个十进制整数。
  • “-”表示左对齐。如果没有这个符号,默认是右对齐。
  • “8”表示输出的字段宽度为8个字符的空间。如果输出的整数位数小于8位,则在左边用空格补齐;如果大于8位,则按照实际位数输出。

4、拆分位数

题目描述:

拆分一个三位数的个位、十位、百位!
你已经完全可以做了哦!

输入格式:

输入一个三位数

输出格式:

逆序输出这个三位数,输出个位、十位、百位,三个数字,用空格分开

#include<stdio.h>
/*
个位 n % 10 
十位 n / 10 % 10
百位 n / 100
*/
int main(){
	int n;
	scanf("%d",&n);
	printf("%d %d %d",n % 10,n / 10 % 10,n / 100);
}

5、陶陶摘苹果

题目描述:

陶陶家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果。苹果成熟的时候,陶陶就会跑去摘苹果。陶陶有个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。

现在已知10个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高度,请帮陶陶算一下她能够摘到的苹果的数目。假设她碰到苹果,苹果就会掉下来。

输入格式:

输入包括两行数据。第一行包含10个100到200之间(包括100和200)的整数(以厘米为单位)分别表示10个苹果到地面的高度,两个相邻的整数之间用一个空格隔开。第二行只包括一个100到120之间(包含100和120)的整数(以厘米为单位),表示陶陶把手伸直的时候能够达到的最大高度。

输出格式:

输出包括一行,这一行只包含一个整数,表示陶陶能够摘到的苹果的数目。

#include<stdio.h>

int main(){
	int h;
	int count = 0;
	int apple[10];
	for(int i = 0; i < 10 ; i++){
		scanf("%d",&apple[i]);
	}
	scanf("%d",&h);
	for(int j = 0; j < 10 ; j++){
		if( (h + 30) >= apple[j] ){
			count++;
		}
	}
	printf("%d",count);
}

二、数据结构与算法

初步了解:

  • 数据结构:组织和存储数据的方式
  • 算法:在有限时间内为解决问题而设计的一组指令和操作步骤
  • 复杂度:评估算法效率,分为时间复杂度和空间复杂度

迭代:一种重复执行某种任务的控制结构(for循环、while循环、嵌套循环等)

递归:通过函数调用自身来解决问题。

  • 递,即程序不断深入地调用自身,通常传入更小或者简化的参数,直到达到“终止条件”。
  • 归:触发“终止条件”后,程序从最深层的递归函数开始逐层返回,汇聚每一层的结果。

迭代是在自下而上的解决问题,从基础的步骤开始不断重复累加这些步骤,直至任务完成。

递归是在自上而下的解决问题,将原问题分解为更小的问题,这些子问题和原问题具有相同的形式,接下来将子问题继续分为更小的子问题,直至到达解是已知的基本情况为止。

时间复杂度:分析统计的不是算法运行时间,而是算法运行时间随着数据量变大时的增长趋势

如何确定渐近上界 ?

1、统计操作数量

  1. 忽略 T(n) 中的常数项。因为它们都与 n 无关,所以对时间复杂度不产生影响。
  2. 省略所有系数。例如,循环 2n 次、5n+1 次等,都可以简化记为 n 次,因为 n 前面的系数对时间复杂度没有影响。
  3. 循环嵌套时使用乘法

2、判断渐进上界

时间复杂度由 T(n) 中最高阶的项来决定。这是因为在 n 趋于无穷大时,最高阶的项将发挥主导作用,其他项的影响都可以忽略。

设输入数据大小为 n ,常见的时间复杂度类型如下所示(按照从低到高的顺序排列)

常数阶 < 对数阶 < 线性阶 < 线性对数阶 < 平方阶 < 指数阶 < 阶乘阶

注意算法的时间效率往往不是固定的,而是与输入数据的分布有关

空间复杂度:用于衡量算法占用内存空间随着数据量变大时的增长趋势

一般情况下,空间复杂度的统计范围是“暂存空间”加上“输出空间”。

暂存空间可以进一步划分为三个部分。

  • 暂存数据:用于保存算法运行过程中的各种常量、变量、对象等。
  • 栈帧空间:用于保存调用函数的上下文数据。系统在每次调用函数时都会在栈顶部创建一个栈帧,函数返回后,栈帧空间会被释放。
  • 指令空间:用于保存编译后的程序指令,在实际统计中通常忽略不计。

在分析一段程序的空间复杂度时,我们通常统计暂存数据、栈帧空间和输出数据三部分。

设输入数据大小为 n ,下面展示了常见的空间复杂度类型(从低到高排列)。

常数阶 < 对数阶 < 线性阶 < 平方阶 < 指数阶

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值