한 배열 에 한 번 만 나 오 는 숫자 를 구하 세 요.

/ * 한 배열 에 한 번 만 나타 나 는 숫자 를 구 합 니 다.한 번 나타 나 는 숫자 구하 기;예 를 들 어 배열 a [] = {2, 4, 3, 6, 3, 2, 5, 5};프로그램 을 실행 한 후 4 와 6 을 출력 해 야 합 니 다.4, 6 은 이 배열 에서 한 번 의 사고 가 나 타 났 기 때 문 입 니 다. 두 숫자 가 같 거나 결과 가 반드시 0 이 고 먼저 이동 하거나 - > 다시 그룹 을 나 누 기 - > 각 하위 서열 의 차이 나 알고리즘: 1. 먼저 배열 의 모든 요 소 를 이동 하거나 조작 하여 결 과 를 구 하 는 것 입 니 다 (본질은 그 두 개의 서로 다른 수의 차이 나, 즉 4 ^ 6 = 0010) 2. 차이 나 조작 결과 에 따라낮은 1 위 가 '1' 인 위치 (이 위 치 는 두 개의 수의 차이 점) 를 찾 아 이 위치 에 있 는 수의 차이 로 두 개의 하위 서열 로 나 뉜 다.다른 두 개의 수 를 얻다 * /
#include<stdio.h>
int getindex(int temp)
{
    int j=0;
    int index=-1;
    for(j=0;j<sizeof(int)*32;j++)
        if((temp >> j)&1 ==1)
        {       index =j;
                break;
        }
    return index;   

}
int firstinarray(int a[],int length, int * number1, int *number2)
{
    int temp=0;
    int i=0;
    for(i=0;i<length;i++)
    {
        temp^=a[i];
    }
    int index = getindex(temp);
    printf("index =%d
"
,index); for(i=0;i<length;i++) { if(( (a[i] >> index)&1)==0) { printf("0:%d
"
,a[i]); *number1^=a[i]; } else { printf("1:%d
"
,a[i]); *number2^=a[i]; } } } int main() { int a[]={2,4,3,6,3,2,5,5}; int length=sizeof(a)/sizeof(int); int number1=0, number2=0; firstinarray(a,length,&number1,&number2); printf("this array is %d,%d
"
,number1,number2); }

좋은 웹페이지 즐겨찾기