01: 가장 가 까 운 요 소 를 찾 습 니 다.
2062 단어 분 치 법
총 시간 제한:
1000ms
메모리 제한:
65536kB
묘사 하 다.
비 하강 시퀀스 에서 주어진 값 과 가장 가 까 운 요 소 를 찾 습 니 다.
입력
첫 번 째 줄 은 비 하강 시퀀스 길이 의 정수 n 을 포함 합 니 다.1 <= n <= 100000。 두 번 째 줄 은 n 개의 정 수 를 포함 하고 비 하강 서열 의 각 요 소 를 포함한다.모든 원소 의 크기 는 0 - 1, 000, 000, 000 사이 에 있다.세 번 째 줄 은 질문 할 주어진 값 의 개 수 를 포함 하 는 정수 m 를 포함 합 니 다.1 <= m <= 10000。 다음 m 줄 은 줄 마다 하나의 정수 로 가장 가 까 운 요소 의 주어진 값 을 묻 기 위해 서 입 니 다.모든 주어진 값 의 크기 는 0 - 1, 000, 000 사이 입 니 다.
출력
m 줄, 각 줄 의 정 수 는 주어진 값 에 가장 가 까 운 요소 값 으로 입력 순 서 를 유지 합 니 다.여러 값 이 조건 을 충족 시 키 면 출력 이 가장 작은 값 입 니 다.
샘플 입력
3
2 5 8
2
10
5
샘플 출력
8
5
1 #include
2 #include
3 int main(int argc, char *argv[])
4 {
5 int n,i,*a,m,t;
6 int begin,end,mid;
7 int x,y;
8
9 scanf("%d",&n);
// n ,
10 a=(int *)malloc(n*sizeof(int));
11 for(i=0;it) { printf("%d
",a[0]); continue;}
// ,
18 else if(a[n-1]1)
24 {
25 if(a[mid]==t) { printf("%d
",a[mid]);break;}
26 else
27 {
28 if(a[mid]>t)
29 {
30 end=mid-1;
31 }
32 else
33 {
34 begin=mid+1;
35 }
36 }
37 mid=(begin+end)/2;
38 }
// ,
39 if(a[mid]!=t)
40 {
41 x=abs(a[begin]-t);
42 y=abs(a[end]-t);
43 if(xy) printf("%d
",a[end]);
45 else printf("%d
",(a[begin]원본 링크:https://www.cnblogs.com/huashanqingzhu/p/6882821.html