9 도 OJ - 제목 1167 - 배열 정렬 - 구조 체 배열 정렬

제목 1167: 배열 정렬
원본 링크:http://ac.jobdu.com/problem.php?pid=1167
제목 설명:
배열 의 값 을 입력 하여 각 값 이 작은 것 에서 큰 것 으로 정렬 된 순 서 를 구 합 니 다.
입력:
여러 그룹의 데 이 터 를 입력 하 십시오.각 조 가 입력 한 첫 번 째 수 는 배열 의 길이 n (1 < = n < = 10000) 이 고 뒤의 수 는 배열 의 값 으로 빈 칸 으로 나 뉜 다.
출력:
각 입력 한 값 은 작은 것 에서 큰 것 으로 배 열 된 순서에 따라 (마지막 숫자 뒤에 빈 칸 이 없다).
샘플 입력:
4 -3 75 12 -3
샘플 출력:
1 3 2 1
원본:
2009 년 북경 항공우주 대학 컴퓨터 연구 생기 시험
사고의 방향
입력 한 수 와 순위 위 치 를 저장 하기 위해 구조 체 배열 을 만 듭 니 다.그 다음 에 먼저 순 서 를 정 한 다음 에 순서대로 출력 하면 된다.AC 코드
#include

using namespace std;
struct num{
    int no;
    int val;
}node[10005]; 

int input[10001];
bool cmp(num a,num b){//      
    return a.val < b.val;
}



int main(){

    int n;
    while(~scanf("%d",&n)){
        for(int  i = 0;i < n;i++){
            cin >> node[i].val;
            input[i] = node[i].val; //input            
        }
        sort(node,node+n,cmp);

        int cur = 1;//    (    )
        node[0].no = 1; 
        for(int i = 1;i < n;i++){
            if(node[i].val == node[i-1].val){
                node[i].no = cur;
            }else{
                cur++;
                node[i].no = cur;
            }
        }

        int first = true;
        for(int i = 0;i < n;i++){//      
            for(int j = 0;j < n;j++){//           
                if(input[i] == node[j].val){
                    if(first){
                        cout << node[j].no;
                        first = false;
                    }else{
                        cout << " " << node[j].no;
                    }
                    break;
                }
            }
        }
        cout << endl;
    }
    return 0;
}

좋은 웹페이지 즐겨찾기