zcmu-1099 查找元素2

【题述】

Description

给定一个整数集合s,集合中有n个元素,我有m次询问,对于每次询问给定一个整数x,若 x存在于集合s中输出x found at y,y为集合s按从小到大排序后第一次出现x的下标,否则输出x not found.

Input

多组测试数据,每组第一行为两个正整数n,m.(1<=n,m<=1000)代表集合中元素的个数和查询次数,接下来n行每行有一个正整数代表集合里的元素.(每个整数的大小小于等于100000),接下来 m行每行有一个正整数代表查询的元素.

Output

详见sample output

Sample Input

4 1 2 3 5 1 5 5 2 1 3 3 3 1 2 3

Sample Output

CASE# 1:

5 found at 4

CASE# 2:

2 not found

3 found at 3

 【9.6更新代码】

#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <vector>
using namespace std;
int a[1005];
int main(){
    int n,m,k,tmp = 1;
    while(scanf("%d%d",&n,&m) != EOF)
    {
        for(int i = 1;i <= n;i++)
        {
            scanf("%d",&a[i]);
            
        }
        sort(a + 1,a + n + 1);
        printf("CASE# %d:\n",tmp ++);
        for(int j = 1 ; j <= m;j++)
        {
            scanf("%d",&k);
            int flag = 0 ;
            
            for(int i = 1;i <= n;i++)
            {
                if(a[i] == k)
                {
                    printf("%d found at %d\n",k,i);
                    flag = 1;
                    break;
                }
            }
            if(!flag)
                printf("%d not found\n",k);
                
        }
    }
    
    
    return 0;
}

 

【我的代码(通过代码)】 

#include <stdio.h>
#include <string.h>
void sort(int arr[], int len) {  //从小到大排序
    int i, j;
    for (i = 0; i < len - 1; i++)          //外层循环控制趟数,总趟数为len-1
        for (j = 0; j < len - 1 - i; j++)  //内层循环为当前i趟数 所需要比较的次数
            if (arr[j] > arr[j + 1]){
                int tmp=arr[j];
                arr[j]=arr[j+1];
                arr[j+1]=tmp;
            }
}
int main(){
    int n,m,i,j,t,count;
    t=1;
    while(scanf("%d%d",&n,&m)!=EOF){
        int a[n],b[m];
        
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));
        for(i=0;i<n;i++){
            scanf("%d",&a[i]);
        }
        sort(a,n);
        for(j=0;j<m;j++){
            scanf("%d",&b[j]);
        }
        printf("CASE# %d:\n",t);
        for(j=0;j<m;j++){
            count=0;//注意⚠️count=0的位置
            for(i=0;i<n;i++){
                
                if(b[j]==a[I]){
                    printf("%d found at %d\n",b[j],i+1);
                    break;//要返回第一次匹配的下标,所以这里要及时break;
                }
                else{
                     count++;
                    if(count==n){//这里判定有没有找到这个数
                        printf("%d not found\n",b[j]);
                        break;
                    }
                    
                        
                }
                
            }
  
        }
        t++;
    }
    
    return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
定义B-树存储结构(要求m3;为方便操作,结点中增加双亲结点指针域,最底层的Fail结点用NULL指针表示并且所有结点均存储于内存)。定义B-树插入关键字函数、删除关键字函数、查找关键字函数以及按层遍历输出B-树所有结点的函数。主函数定义菜单(1.插入关键字 2.删除关键字 3. 查找关键字 4.层遍历输出B-树所有结点 5.结束程序)。 1. 插入关键字功能的输入为一个关键字,输出为新插入关键字所在结点的信息。 要求结点信息输出格式如下所示: (R102, n, K1, K2, …, Kn) R102表示结点位置,R表示根结点指针;第一个数字1表示根结点的A[1]指针,第二个数字0表求R->A[1]所指结点的A[0]指针,第三个数字2表示R->A[1]->A[0]所指结点的A[2]指针,即该结点指针为: R->A[1]->A[0]->A[2](该结点在第4层上)。n为该结点的关键字数目,K1, K2, …, Kn为该结点中n个非递减有序的关键字。 2. 删除关键字功能的输入为一个关键字,输出为删除成功与失败的信息。 3. 查找关键字功能的输入为一个关键字,输出为查找成功与失败的信息,查找成功时,应输出关键字所在结点信息(结点信息输出方法同1.)。 4. 按层遍历输出B-树所有结点功能的输入为一个字符文件名,输出为该字符文件,字符文件中,一个结点的信息输出一行(结点信息输出方法同1.),结点输出序为按层号由小到大并且同层结点从左向右。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值