2018/07/24-25:数据结构/STL/思维

题A:Where is the Marble?

链接:https://odzkskevi.qnssl.com/53e5c6d66221525b0c18113b513fc3fb?v=1532393894

题意:输入a个数,询问b次。在这a个数中找x的位置。如果找到,便输出x found at y;如果没有找到输出x not found’

思路1:(费时长)

用sort()函数排序,暴力查找x。

代码:

  1. #include<iostream>
  2. #include<algorithm>
  3. #define maxn 10000+10
  4. using namespace std;
  5. int s1[maxn];
  6. int s2[maxn];
  7. bool cmp(int a,int b){
  8.     return a<b;
  9. }
  10. int main()
  11. {
  12.     int N,Q;
  13.     int num=0;
  14.     while(scanf("%d%d",&N,&Q)!=EOF&&N!=0&&Q!=0){
  15.         for(int i=0;i<N;i++)
  16.             scanf("%d",&s1[i]);
  17.         num++;
  18.         sort(s1,s1+N,cmp);//排序
  19.                 //for(int i=0;i<N;i++)
  20.             //printf("%d ",s1[i]);
  21.         //printf("\n");
  22.         printf("CASE# %d:\n",num);
  23.         for(int j=0;j<Q;j++){
  24.             scanf("%d",&s2[j]);
  25.             int flag=0;
  26.             for(int i=0;i<N;i++){
  27.                 if(s2[j]==s1[i]){
  28.                     flag=1;
  29.                     printf("%d found at %d\n",s2[j],i+1);
  30.                         break;}
  31.             }
  32.             if(flag==0)
  33.                 printf("%d not found\n",s2[j]);
  34.         }
  35.     }
  36.         return 0;
  37. }

思路二:

lower_bound(s,s+a,x)-s;返回第一个不小于x的坐标

upper_bound(s,s+a,x)-s;返回第一个大于x的坐标

代码:

  1. #include<iostream>
  2. #include<algorithm>
  3. using namespace std;
  4. const int maxn=10000+10;
  5. int s[maxn];
  6. int main(){
  7.     int a,b;
  8.     int x;
  9.     int num=0;
  10.     while(scanf("%d%d",&a,&b)&&a&&b){
  11.         for(int i=0;i<a;i++){
  12.             scanf("%d",&s[i]);}
  13.         sort(s,s+a);
  14.         num++;
  15.         printf("CASE# %d:\n",num);
  16.         for(int j=1;j<=b;j++){
  17.         scanf("%d",&x);
  18.         int p=lower_bound(s,s+a,x)-s;//返回第一个不小于x的值
  19.         if(s[p]==x)printf("%d found at %d\n",x,p+1);
  20.         else printf("%d not found\n",x);
  21.         }
  22.     }
  23.     return 0;
  24. }
     

注意:

  1. 本题WA好几次的原因是,没有注意输出方式。
  2. 以后注意使用

lower_bound   upper_bound 会使程序更加完善更加简单更加迅速

猜你喜欢

转载自blog.csdn.net/qq_42398530/article/details/81208765
今日推荐