最基础的穷竭搜索
今日知识点总结
1.三角形面积
边长:a,b,c q=(a+b+c)/2 面积:s=sqrt(p*(p-a)*(p-b)*(p-c))
2.多组输入
while(scanf("%c",&c)!=EOF)
{
getchar();
printf...............;
}
**注:多组输入过程中要注意“回车”也是字母,所以要“吸收”(getchar())掉该字母。**
3.移位运算符<< >>
例如:整数 g = 10
计算:g<<2
结果:40
在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,**左移n位就相当于乘以2的n次方。**
4.输入类型
- 计算机储存小数取近似值 float/double ,无限靠近但永远不等于
- Float 默认小数点后7位
- Double小数点13-15位
- 对于float double%f%lf
- printf %f
最基础的穷竭搜索(一)
1.栈(stack)
push:从栈顶端放入一组数据
pop:从栈顶端取出一组数据
stack::pop 移除顶端数据
stack::top 访问顶端数据
书写代码时 可以用s.push()/ s.top()-----s为声明储存某某类型的栈
2.队列(queue)
与栈一样支持 push、pop 但有所不同
pop: 取出最底端元素
queue::froont访问最底端数据元素
que.pop()/que.front() -----que声明储存某某类型的队列
3.深度优先搜索(DFS)
图的遍历常用方法:深度优先搜索、广度优先搜索
方法:深度优先搜索从最开始的状态出发,遍历所有可能达到的状态。当连接点后遍历过时,退回上一步。(插几张网课ppt)
例题:
稠密图适合在邻接矩阵上进行深度遍历 O(n2)
稀疏图适合在邻接表上进行深度遍历 O(n+e)
4.宽度优先搜索(BFS)
方法:宽度优先搜索先搜索出距离初始状态近的状态。从某一结点出发—>访问该节点所有连接点—>依次访问下一连接点的连接点
类似树的层次遍历,算法效率取决于存储结构
邻接矩阵 O(n2)
邻接表 O(n+e)
例:变种水仙花
题目链接
题意:
变种水仙花数 - Lily Number:把任意的数字,从中间拆分成两个数字,比如1461 可以拆分成(1和461),(14和61),(146和1),如果所有拆分后的乘积之和等于自身,则是一个Lily Number。
例如:
655 = 6 * 55 + 65 * 5
1461 = 1*461 + 14*61 + 146*1
求出 5位数中的所有 Lily Number。
输入描述:
无
输出描述:
一行,5位数中的所有 Lily Number,每两个数之间间隔一个空格。
分析:
能构成水仙花的数字的组成方式可以看作 把这个数字依次对10、100、1000、10000取余,余数*商再把每次结果相加,如果和原来的数字相同,则是水仙花数。
代码:
#include"bits/stdc++.h"
using namespace std;
int main(){
for(int i=10000;i<=99999;i++){
int sum=0,mod=10000,cur=i;
while(mod/10){
sum+=(cur/mod)*(cur%mod);
mod/=10;
}
if(sum==i){
printf("%d ",i);
}
}
return 0;
}