1,查找
题目描述:
输入数组长度 n
输入数组 a[1...n]
输入查找个数m
输入查找数字b[1...m]
输出 YES or NO 查找有则YES 否则NO 。
输入:
输入有多组数据。
每组输入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>
using namespace std;
int main(){
int n,m;
int i,j;
int swap,find;
while(cin>>n){
int num[101] = {0};
for(i=0;i<n;i++){
cin>>num[i];
}
for(i=0;i<n;i++){
for(j=0;j<n-1-i;j++){
if(num[j] > num[j+1]){
swap = num[j];
num[j] = num[j+1];
num[j+1] = swap;
}
}
}
cin>>m;
for(i=0;i<m;i++){
cin>>find;
int mid;
int low = 0;
int head = n-1;
while(low<=head){
mid = (low+head)/2;
if(num[mid] == find){
break;
}
if(num[mid] > find){
head = mid-1;
}
if(num[mid] < find){
low = mid +1;
}
}
if(num[mid] == find){
cout<<"YES"<<endl;
}else{
cout<<"NO"<<endl;
}
}
}
return 0;
}
#include<iostream>
using namespace std;
int main(){
int n,m;
int i,a;
int find;
while(cin>>n){
int num[101] = {0};
for(i=0;i<n;i++){
cin>>a;
num[a] = 1;
}
cin>>m;
for(i=0;i<m;i++){
cin>>find;
if(num[find] == 1){
cout<<"YES"<<endl;
}else{
cout<<"NO"<<endl;
}
}
}
}
2,查找第K小数
题目描述:
查找一个数组的第K小的数,注意同样大小算一样大。
如 2 1 3 4 5 2 第三小数为3。
输入:
输入有多组数据。
每组输入n,然后输入n个整数(1<=n<=1000),再输入k。
输出:
输出第k小的整数。
样例输入:
6
2 1 3 5 2 2
3
样例输出:
3
总结:上面提到查找最好使用哈希,这里就用到了,很简单,但是我还是想使用分冶法做一遍。
#include<iostream>
using namespace std;
int main(){
int n;
int i,j,k,m;
while(cin>>n){
int arr[101000]={0};
for(i=0;i<n;i++){
cin>>m;
arr[m] = 1;
}
cin>>k;
j=1;
for(i=0;i<101000;i++){
if(arr[i] == 1){
if(j == k){
cout<<i<<endl;
break;
}else{
j++;
}
}
}
}
return 0;
}
3,打牌
题目描述:
牌只有1到9,手里拿着已经排好序的牌a,对方出牌b,用程序判断手中牌是否能够压过对方出牌。
规则:出牌牌型有5种
[1]一张 如4 则5...9可压过
[2]两张 如44 则55,66,77,...,99可压过
[3]三张 如444 规则如[2]
[4]四张 如4444 规则如[2]
[5]五张 牌型只有12345 23456 34567 45678 56789五个,后面的比前面的均大。
输入:
输入有多组数据。
每组输入两个字符串(字符串大小不超过100)a,b。a字符串代表手中牌,b字符串代表处的牌。
输出:
压过输出YES 否则NO。
样例输入:
12233445566677
33
样例输出:
YES
总结:没有ac,不明白为什么,案例都可以通过啊
#include<iostream>
#include<string>
using namespace std;
int main(){
string a,b;
int i,j,h;
while(cin>>a>>b){
bool flag = false;
int arr[10]={0};
for(i=0;i<a.length();i++){
h = a[i] - '0';
arr[h]++;
}
if(b.length() >= 1 && b.length() <= 4){
j = b.length();
h = b[0] - '0';
for(i=0;i<10;i++){
if(i>h && arr[i] > j){
flag = true;
break;
}
}
}
if(b.length() == 5){
int min = b[0] - '0';
for(i=min+1;i<10;i++){
for(j=0;j<5;j++){
if(arr[i+j] == 0){
break;
}
if(j == 4){
flag = true;
break;
}
}
}
}
if(flag){
cout<<"YES"<<endl;
}else{
cout<<"NO"<<endl;
}
}
return 0;
}
4,树查找
题目描述:
有一棵树,输出某一深度的所有节点,有则输出这些节点,无则输出EMPTY。该树是完全二叉树。
输入:
输入有多组数据。
每组输入一个n(1<=n<=1000),然后将树中的这n个节点依次输入,再输入一个d代表深度。
输出:
输出该树中第d层得所有节点,节点间用空格隔开,最后一个节点后没有空格。
样例输入:
4
1 2 3 4
2
样例输出:
2 3
总结:感觉有些cheat,树查找没有用到树,只是树的一些性质。
#include<iostream>
using namespace std;
#define min_num -1000
int main(){
int n,m;
int i,j,k;
while(cin>>n){
int arr[1010];
for(i=0;i<1010;i++){
arr[i] = min_num;
}
for(i=1;i<=n;i++){
cin>>arr[i];
}
cin>>m;
k=1;
for(i=1;i < m;i++){
k*=2;
}
j=0;
for(i=k;i <= k*2-1;i++){
if(arr[i] != min_num){
j++;
}
}
if(j==0){
cout<<"EMPTY"<<endl;
}else{
for(i=0;i<j-1;i++){
cout<<arr[k+i]<<" ";
}
cout<<arr[k+j-1]<<endl;
}
}
return 0;
}
分享到:
相关推荐
北京邮电大学_信通院_模电实验三_共射放大电路测试报告
北京邮电大学 计算机院 复试机试 有 2009 2010 2011 的题目
北京邮电大学_信通院_数据结构_多项式求和
北邮计算机考研 历年复试 上机真题,包含近5年上机真题
北京邮电大学_信通院_模电实验六_JFET-CS放大电路测试报告
北京邮电大学网络技术研究院计算机科学与技术专业复试课件 6门复试课程之一:体系结构
北京邮电大学2008年考研通信原理及答案
北京邮电大学 2020年春季学期 信息与通信工程学院 数据结构 C++ 利用单链表完成的通讯录系统 全部代码
北京邮电大学是一所通信计算机特色学校,本资料用于考研复试。
北京邮电大学 计算机院 研究生复试机试题目 ! 包含2011年计算机院得题目
北京邮电大学_微机原理软件实验报告.docx
北京邮电大学计算机专业历年真题北京邮电大学计算机专业历年真题北京邮电大学计算机专业历年真题北京邮电大学计算机专业历年真题北京邮电大学计算机专业历年真题北京邮电大学计算机专业历年真题
北京邮电大学_Pascal语言 6讲 Pascal语言程序设计 0505 Pascal语言程序设计-高大永-2Y
重庆邮电研究生资料 C:\Documents and Settings\Administrator\桌面\信号与系统——重庆邮电大学2010年研究生入学考试自命题复试大纲_免费考研专业课复习大纲_考研专业资料下载__考研共济网.htm
该资源为2013-2021年北京邮电大学601数学分析考研真题,资源高清无水印哦! (注:2021年缺失一页)
该资源为2017年西安邮电大学数字信号处理考研复试真题及参考答案,资源高清无水印哦! 该资源为2017年西安邮电大学数字信号处理考研复试真题及参考答案,资源高清无水印哦!
南京邮电大学_数电复习提纲
该资源为北京邮电大学804信号与系统历年考研真题及参考答案,资源高清无水印哦! 该资源为北京邮电大学804信号与系统历年考研真题及参考答案,资源高清无水印哦!
北京邮电大学计算机考研、复试真题,考研真题,考研大纲,考研笔记,考研经验.pdf