华为上机测试 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;
}

 

posted @ 2015-07-02 12:36  fangying  阅读(301)  评论(0编辑  收藏  举报