问题 C: 查找 3

时间限制: 1 Sec  内存限制: 128 MB
提交: 50  解决: 23
[提交][状态]

题目描述

现有一个排列有序的大数组,要求查找一个数是否包含在这个大数组里

输入

输入 m,n,m代表要查找的数,m(0<=10<=2^31),n(0<=n<=1000000) 代表数组的大小,接下来就是n个数。

输出

如果m存在,则输出YES,否则输出NO;

样例输入

8 2 5 6

样例输出

NO

提示

#include<stdio.h>
  
  int main()
  
  {
  
         int ln,x,t,s,i,n,m,p;
  
         static int a[501];
 
        scanf("%d,%d,%d",&n,&m,&p);
 
        for(i=1;i<=n;i++) a[i]=1;
 
        ln=0;x=0;t=0;
 
        while(1)
 
        {
 
               for(s=0,i=1;i<=n;i++)
 
               {
 
                      s=s+a[i];
 
                      if(s==m) {a[i]=0;s=0;ln++;}
 
                      if(ln==p&&x==0) x=i;
 
                      if(ln==n-m+1) {t=1;break;}
 
               }
 
               if(t==1) break;
 
               for(s=0,i=n;i>=1;i--)
 
               {
 
                      s=s+a[i];
 
                      if(s==m) {a[i]=0;s=0;ln++;}
 
                      if(ln==p&&x==0) x=i;
 
                      if(ln==n-m+1) {t=1; break;}
 
               }
 
               if(t==1) break;
 
        }
 
        for(i=1;i<=n;i++)
 
               if(a[i]!=0) printf("%d ",i);
 
        printf("\n");
        printf("%d",x);
 
       
 
        return 0;
 
 }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值