第二届省赛 A:简单计算

Problem A: 简单计算

Time Limit: 5 Sec Memory Limit: 128 MB
Submit: 65 Solved: 39
[Submit][Status][Web Board]
Description

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

Input

输入的第一行为一个正整数T(1≤T≤20),代表测试数据组数。
对于每组测试数据,输入的第一行为一个正整数n(1≤n≤100000),第二行为n个正整数A1、A2、…、An(1≤Ai≤10^9),每个数之间以空格分隔。

Output

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

Sample Input

2
5
3 2 4 5 6
4
3 4 2 5
Sample Output

Case 1: 2

Case 2: 2


刚接触到STL,刚开始用的是优化,调的函数接口,不过 第一个是WA的代码,下一个是AC的代码。


#include 
#include 
#include 
#include 
using namespace std;
div_t temp;
int main(void)
{
    //freopen("A.txt","r",stdin);
    int t;
    scanf("%d",&t);
    int k=1;
    while(t--)
    {
        int n;
        scanf("%d",&n);
        int minnnum=9999999999;
        int minnum=9999999999;
        int num;
        for(int i=1;i<=n;i++)
        {
            int m;
            num=0;
            scanf("%d",&m);
            temp=div(m,2);
            if(temp.quot==1&&temp.rem==1) num++;
            while(temp.quot!=1)
            {
                if(temp.rem==1) num++;
                temp=div(temp.quot,2);
            }
            num++;
            if(num<=minnnum)
            {
                if(num




#include 
#include 
#include 
using namespace std;

int main(void)
{
    int n;
    scanf("%d",&n);
    int k=1;
    while(n--)
    {
        int m;
         int minxx;
         int sum;
        scanf("%d",&m);
         int minx=1000000000;
       for(int i=1;i<=m;i++)
       {
           int number;
           sum=0;
           scanf("%d",&number);
        int num=number;



        while(num)
        {
            if(num%2==1)
                sum++;
            num/=2;
        }
       // printf("%d %d\n",sum,minx);
      //  sum++;
        if(sumnumber)
                minxx=number;
        }

       }
        printf("Case %d: %d\n",k++,minxx);
    }

    return 0;
}


 
  
 
 

你可能感兴趣的:(水题)