题解 | #合并表记录#

合并表记录

http://www.nowcoder.com/practice/de044e89123f4a7482bd2b214a685201

最笨方法:
1.获取输入数组
2.用index进行排序
3.将相同index的数值进行相加
4.输出不同index的index和数据。

以下是代码:

#include<stdio.h>
#include<stdlib.h>


typedef struct {
    int index;
    int data;
}daT;


int main(void){
    int num =0;
    int i,j,step;
    daT tmp = {0,0};
    daT *ptr = NULL;

    scanf("%d", &num);

    //printf("---------%d\n", num);
    unsigned int* dataBase = (unsigned int*)malloc(sizeof(int)*2*num);
    ptr =(daT*) dataBase;
    memset(dataBase, 0, sizeof(int)*2*num);

    for(i=0; i< num; i++){
        scanf("%d %d", dataBase+2*i, dataBase+2*i+1);
    }

    //just maopao

    for(i=0; i < num; i++) {
        for(j=0; j < num-i-1; j++){
            if((ptr+j)->index > (ptr+j+1)->index){
                memcpy(&tmp, ptr+j, sizeof(daT));
                memcpy(ptr+j, ptr+j+1, sizeof(daT));
                memcpy(ptr+j+1, &tmp, sizeof(daT));
            }
        }
    }

    //just hebing

    for(i= 0; i <num; i=i+step+1){
        step =0;
        for(j=i+1; j<num; j++){
            if((ptr+i)->index == (ptr+j)->index ){
                (ptr+i)->data += (ptr+j)->data;
                step++;
            }else{
                break;
            }
        }
    }
    //output

    i = 0;
    do{
        if(i == 0) {
            printf("%d %d\n", ptr->index, ptr->data);
        }else{
            if((ptr+i)->index != (ptr+i-1)->index) {
                printf("%d %d\n", (ptr+i)->index, (ptr+i)->data);
            }
        }
        i++;
    }while(i< num);

    if(dataBase)
        free(dataBase);
    return 0;
}
全部评论

相关推荐

双非一本失业第二年:《机器视觉垃圾分类》
点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务