华师大 OJ 3036

来源:互联网 发布:java jar 日志输出 编辑:程序博客网 时间:2024/04/28 23:58

题目:点击打开链接


这里比较麻烦的是,对于64位整数的输入输出在不同的编译器要用不同的方式。

总之gcc 用lld就通过了测试。




/******************************************************************************//*                                                                            *//*  DON'T MODIFY main() function anyway!                                      *//*                                                                            *//******************************************************************************/#include <stdio.h>#include <stdlib.h>struct data{    long long int digitalValue;    int countNum1;};void init(){}void solve(); /* write function solve() to process one case of the problem    */int main(){  int i,t; init();   scanf("%d\n",&t);   for (i=0;i<t;i++)   { printf("case #%d:\n",i);     solve();   }   return 0;}//输入数据//计算每个整数按照64位二进制补码表示中1的位数//编写比较函数//调用qsort函数进行排序//输出int cmp(const void *a, const void *b){    struct data x;    struct data y;    x = *((struct data *)a);    y = *((struct data *)b);    if(y.countNum1 != x.countNum1)        return y.countNum1 - x.countNum1;    else {        if(x.digitalValue > y.digitalValue) return 1;        else return -1;    }}void solve(){    long long int d;    int count;    int n;    struct data record[100000];    int i,k;    scanf("%d",&n);    for(k=0;k < n;k++){        scanf("%lld",&(record[k].digitalValue));        d = 1;        record[k].countNum1=0;        for(i = 0;i<64;i++){            if( d & record[k].digitalValue) record[k].countNum1++;            d = d<<1;        }    }    qsort(record,n,sizeof(record[0]),cmp);    for(i = 0; i < n-1;i++){        printf("%lld ",record[i].digitalValue);    }    printf("%lld\n",record[i].digitalValue);}


0 0
原创粉丝点击