算法学习--Day4
今天写了两章题目,仍然是比较基础的内容。感觉时间好紧张,怕来不及,所以以后要加快速度了。
今天写的最多的是查找类题目,关键是二分查找的掌握。
题目描述
输入描述:
测试数据有多组,输入n(1<=n<=200),接着输入n个数,然后输入x。
输出描述:
对于每组输入,请输出结果。
输入
2
1 3
0
输出
-1
#include <stdio.h> int main(){
int n;
while(scanf("%d",&n)!=EOF){
int array[];
for(int i=;i<n;i++) scanf("%d",&array[i]);
int p;
int fin=-;
scanf("%d",&p);
for(int i=;i<n;i++) {
if(array[i]==p) {
fin=i;
break;}
}
printf("%d",fin);
}
return ;
}
题目描述
输入描述:
输入有多组数据。
每组输入n,然后输入n个整数,再输入m,然后再输入m个整数(1<=m,n<=100)。
输出描述:
如果在n个数组中输出YES否则输出NO。
输入
5
1 5 2 4 3
3
2 5 6
输出
YES
YES
NO
#include <iostream>
#include <stdio.h>
#include <algorithm>
using namespace std; //int find(int num,int buf[],int n){
// int ans=-1;
// int base=0;
// int top=n-1;
// while (top>=base){
// int mid = buf[(top+base)/2];
// if (mid==num) {ans=1;
// break;}
// if(mid>num){
// top=mid-1;
// }
// if(mid<num){
// base = mid+1;
// }
//
// }
// return ans;
//}
//
//int main(){
// int n;
// while (scanf("%d",&n)!=EOF){
// int buf[101];
// int m;
// for(int i=0;i<n;i++){
//
// scanf("%d",&buf[i]);
// }
// sort(buf,buf+n);
// int buf2[101];
// scanf("%d",&m);
// for(int i=0;i<m;i++) scanf("%d",&buf2[i]);
// for(int j=0;j<m;j++){
// int fin = find(buf2[j],buf,n);
// if(fin==1) printf("YES\n");
// else printf("NO\n");
// }
// }
//
// return 0;
//} int main(){
int n;
while (scanf("%d",&n)!=EOF){
int buf[];
for (int i = ; i < ; ++i) buf[i]=;
for (int i = ; i <n ; ++i) {
int cut ;
scanf("%d",&cut);
buf[cut]=;
}
int m;
scanf("%d",&m);
for (int j = ; j < m; ++j) {
int c ;
cin>>c;
if(buf[c]==) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
}
}
这个题目我要重点说一下,我注释掉的代码是使用二分查找来做的,但是由于使用搜索过于复杂。。导致我的题目没给ac,所以换之前使用的哈希的思想去做了。就当做练手了。
题目描述
输入描述:
第一行是此数组的元素个数k(4<k<80),第二行是k个整数,每两个整数之间用空格分隔。
输出描述:
每个案例输出为n行:每行对应于相应数组的所有极值点下标值,下标值之间用空格分隔。
输入
10
10 12 12 11 11 12 23 24 12 12
输出
0 7
#include <iostream>
#include <stdio.h>
using namespace std;
int main(){
int n;
while (scanf("%d",&n)!=EOF){
int buf[];
for (int i=;i<n;i++) cin>>buf[i];
if(buf[]!=buf[]) cout<<<<" ";
for (int j = ; j < n-; ++j) {
if((buf[j]>buf[j-]&&buf[j]>buf[j+])||(buf[j]<buf[j-]&&buf[j]<buf[j+])) cout<<j<<" "; }
if(buf[n-]!=buf[n-]) cout<<n-;
}
return ;
}
题目描述
输入描述:
输入的第一行为N,即学生的个数(N<=1000)
接下来的N行包括N个学生的信息,信息格式如下:
01 李江 男 21
02 刘唐 男 23
03 张军 男 19
04 王娜 女 19
然后输入一个M(M<=10000),接下来会有M行,代表M次查询,每行输入一个学号,格式如下:
02
03
01
04
输出描述:
输出M行,每行包括一个对应于查询的学生的信息。
如果没有对应的学生信息,则输出“No Answer!”
输入
4
01 李江 男 21
02 刘唐 男 23
03 张军 男 19
04 王娜 女 19
5
02
03
01
04
03
输出
02 刘唐 男 23
03 张军 男 19
01 李江 男 21
04 王娜 女 19
03 张军 男 19
#include <string.h>
#include <iostream>
#include <algorithm>
using namespace std;
struct E{
char number[];
char name[];
char sex[];
int age;
};
bool cmp(E a,E b){
int fin = strcmp(a.number,b.number);
return fin<;
};
int find(E buf[],char goal[],int n){
int base=;
int top=n-; while (top>=base){
int mid = (base+top)/;
int cut = strcmp(goal,buf[mid].number);
if(cut==) {cout<<buf[mid].number<<" "<<buf[mid].name<<" "<<buf[mid].sex<<" "<<buf[mid].age<<endl; return mid;
break;}
if(cut>) base = mid+;
if(cut<) top = mid-;
}
cout<<"No Answer!"<<endl;
return -;
} int main(){
int n;
while (scanf("%d",&n)!=EOF){
E stu[];
for (int i = ; i < n; ++i) {
cin>>stu[i].number>>stu[i].name>>stu[i].sex>>stu[i].age;
}
sort(stu,stu+n,cmp); int m;
cin>>m; for (int j = ; j < m; ++j) {
char stunum[];
//scanf("%s",stunum);
cin>>stunum;
//cout<<stunum;
find(stu,stunum,n);
} }
return ;
}
算法学习--Day4的更多相关文章
- DSP算法学习-过采样技术
DSP算法学习-过采样技术 彭会锋 2015-04-27 23:23:47 参考论文: 1 http://wr.lib.tsinghua.edu.cn/sites/default/files/1207 ...
- 算法学习之C语言基础
算法学习,先熟悉一下C语言哈!!! #include <conio.h> #include<stdio.h> int main(){ printf(+); getch(); ; ...
- Python之路,Day21 - 常用算法学习
Python之路,Day21 - 常用算法学习 本节内容 算法定义 时间复杂度 空间复杂度 常用算法实例 1.算法定义 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的 ...
- C / C++算法学习笔记(8)-SHELL排序
原始地址:C / C++算法学习笔记(8)-SHELL排序 基本思想 先取一个小于n的整数d1作为第一个增量(gap),把文件的全部记录分成d1个组.所有距离为dl的倍数的记录放在同一个组中.先在各组 ...
- 算法学习之BFS、DFS入门
算法学习之BFS.DFS入门 0x1 问题描述 迷宫的最短路径 给定一个大小为N*M的迷宫.迷宫由通道和墙壁组成,每一步可以向相邻的上下左右四格的通道移动.请求出从起点到终点所需的最小步数.如果不能到 ...
- 二次剩余Cipolla算法学习笔记
对于同余式 \[x^2 \equiv n \pmod p\] 若对于给定的\(n, P\),存在\(x\)满足上面的式子,则乘\(n\)在模\(p\)意义下是二次剩余,否则为非二次剩余 我们需要计算的 ...
- Manacher算法学习笔记 | LeetCode#5
Manacher算法学习笔记 DECLARATION 引用来源:https://www.cnblogs.com/grandyang/p/4475985.html CONTENT 用途:寻找一个字符串的 ...
- 第四百一十五节,python常用排序算法学习
第四百一十五节,python常用排序算法学习 常用排序 名称 复杂度 说明 备注 冒泡排序Bubble Sort O(N*N) 将待排序的元素看作是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮 ...
- PCA算法学习(Matlab实现)
PCA(主成分分析)算法,主要用于数据降维,保留了数据集中对方差贡献最大的若干个特征来达到简化数据集的目的. 实现数据降维的步骤: 1.将原始数据中的每一个样本用向量表示,把所有样本组合起来构成一个矩 ...
随机推荐
- parameters arguments 形式参数 实际参数
parameter和argument的区别 – 笑遍世界 http://smilejay.com/2011/11/parameter_argument/ https://en.wikipedia.or ...
- Git简介和安装
一.什么是Git? Git是一个分布式版本控制系统,客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来.如图所示: 任何一处的服务器或者个人机发生故障,都可以用其它机器的任何一个镜像出来 ...
- Python pandas 获取Excel重复记录
pip install pandas pip install xlrd 大量记录的时候,用EXCEL排序处理比较费劲,EXCEL程序动不动就无响应了,用pands完美解决. # We will use ...
- Retina屏幕下image-set
实现Retina屏幕下图像的显示方法,还特别给我截取了一段代码: .soso .logo .qqlogo { display: block; width: 134px; height: 44px; b ...
- uva 401 Palindromes 解题报告
题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- servlet与jsp理论知识讲解
servlet是java服务器端编程,是运行在服务器上的.不同于以前的java小程序. ...
- SDK Manager中勾选项
运行SDK Manager 勾选对应版本的SDK,从这里基本可以知道一个Android版本对应着一个版本的API. 其中每个包都有这么几个文件: Documentation for Android S ...
- Session移除
Session.Clear()就是把Session对象中的所有项目都删除了,Session对象里面啥都没有.但是Session对象还保留. Session.Abandon()就是把当前Session对 ...
- hdu-5358 First One(尺取法)
题目链接: First One Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Other ...
- DNS多出口分析
DNS多出口分问题现象:当dns解析出的ip非域名的本地覆盖组,则怀疑是DNS多出口或者DNS劫持.接下来判断该ip是否为网宿ip,如果不是,则是劫持问题,走劫持流程进行反馈.如果是网宿ip,则用以下 ...