首页 > 代码库 > SDUT OJ 2616 简单计算

SDUT OJ 2616 简单计算

简单计算

Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

题目描述

某天,XX YY 出了一道题,题目是:

给出n 个十进制的数,找出这n 个数的二进制表示中1 的个数最少的数。

由于YY 的计算能力很差,所以他想让你帮他写个程序来计算出来。

输入

 

输入的第一行为一个正整数T(1 T20),代表测试数据组数。

对于每组测试数据:

输入的第一行为一个正整数n (1 n 105)

第二行为n 个正整数A1A2An1 Ai 109)。

输出

 

每组数据输出一行,先输出数据组数,再输出二进制中含1 最少的数,如果有多个数符合条件,输出最小的那个。具体输出格式见样例输出。

示例输入

25 3 2 4 5 643 4 2 5

示例输出

Case 1: 2Case 2: 2

#include <iostream>#include <string>#include <algorithm>using namespace std;int a[100004];int BitCount2(unsigned int n) {    unsigned int c =0 ;    for (c =0; n; ++c)    {        n &= (n -1) ; // 清除最低位的1    }    return c ; //返回 该十进制数转换为二进制后中1的个数}int main(){    int t;    int i,j, k=1;    int n;    int dd, min, cc;    cin>>t;    while(t--)    {        cin>>n;        cin>>a[0];        min=BitCount2( a[0] );        cc=a[0];        for(i=1; i<n; i++)        {            cin>>a[i];            dd=BitCount2(a[i]);            if(dd<min )            {                min=dd;                cc=a[i];            }            else if(dd==min)            {                if(a[i]<cc)                  cc=a[i];            }        }        cout<<"Case "<<k++<<": "<<cc<<endl;    }    return 0;}

 

SDUT OJ 2616 简单计算