华为上机测试 2015


描述: 输入一组大于等于0的整数,根据从大到小排序后输出,如果排序后有连续整数时,只输出连续数中最大和最小的两个数。输入的所有整数各不相同,即不用考虑两个整数相同的情况。

运行时间:无限制

内存限制:无限制

输入:一组大于等于0的整数,不考虑非法输入,各个整数之间以逗号(",")分隔,输入总数长度小于100个字节。

输出:排序后,各个整数之间以逗号(",")分隔。

样例输入:1,4,7,2,5,8,9,11

样例输出:11,9,7,5,4,2,1


 

#include <iostream>

#include <vector>

#include <algorithm>

#include <set>

using namespace std;



int main(){

    vector<int> src;

    set<int> dst;



    int input;

    int len;

    

    while(1){

        cin>>input;

        src.push_back(input);

        if('\n' == cin.get()) break;

    }

    

    sort(src.begin(), src.end(), greater<int>());

    

    len = src.size();

    int i;

    int j;

    int start = src[0] ;

    int stop = src[0];

    

    dst.insert(src[0]);

    for(i=0; i<len; ){

        for(j=i+1; j<len;++j){

            if(src[i] - src[j] == j-i){

                stop = src[j];

            }else{

                start = src[j];

                break;

            }

        } 



        dst.insert(stop);

        dst.insert(start);

        i = j;

    }

    

    set<int>::reverse_iterator iter = dst.rbegin();

    for(; iter != --dst.rend(); ++iter){

        cout<<*iter<<",";

    }

    cout<<*iter;

    return 0;

}

 

 

 

 

 

 

 


描述:输入一组大于等于0的整数,各个整数之间以逗号(",")分隔,输入总长度小于4096,输出去除重复之后的整数

输入:一组整数,各个整数之间以逗号(",")分隔

输出:各个整数之间以逗号(",")分隔

样例输入:9,9,2,3,6,5,2,21

样例输出:9,2,3,5,21

 


#include <stdio.h>

#include <string.h>

#include <stdlib.h>



#define MAX_LEN 4096



int main(){

	int src[MAX_LEN];

	int dst[MAX_LEN];



    int len;

    int i;

    int j;

    int k = 0;



	while(1){

        len = 0;

        k = 0;

        i = 0;

        j = 0;

        

        do{

            scanf("%d",&src[len++]);

            if(getchar() == '\n'){

                break;

            }

        }while(1);



        /* delete replicas : 去除重复的项 */

        for(i=0; i<len ; i++){

            for(j=0; j<=k; j++){

                if(src[i] == dst[j]){

                    break;

                }

                if(j == k){

                    dst[k] = src[i];

                    k++;

                    break;

                }

            }

        }



        for(i=0 ; i<k-1; i++){

            printf("%d,",dst[i]);

        }

        printf("%d",dst[k-1]);

	}

	

	return 0;	

}

 

 

 

 

 

 


 

描述:输入一组大于等于0的整数,各个整数之间以逗号(",")分隔,先按照从大到小排序,然后输出去除重复之后的整数

输入:一组整数,各个整数之间以逗号(",")分隔

输出:各个整数之间以逗号(",")分隔

样例输入:9,9,2,3,6,5,2,21

样例输出:21,9,5,3,2


 

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

 

#define MAX_LEN 4096

 

int compare(const void *a, const void *b){

    return *(int *)b - *(int *)a;

}

 

int main(){

    int src[MAX_LEN];

    int dst[MAX_LEN] = {-1};

 

    int i = 0;

    int j = 0;

 

    int len = 0;

 

    while(1){

        len = 0;

        j = 0;

 

        do{

            scanf("%d",&src[len++]);

            if(getchar() == '\n'){

                break;

            }

        }while(1);

 

        qsort(src, len, sizeof(int), compare);

    //排序后去重的方法

        for(i=0; i<len; i++){

            while(src[i]==src[i+1]){

                i++;

            }

            dst[j++] = src[i];

        }

 

        for(i=0; i<j; i++){

            printf("%d,",dst[i]);

        }

    }

 

    return 0;

}

 

你可能感兴趣的:(华为)