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
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 <iostream>
#include <cstdio>
#include <memory.h>
#include <stdlib.h>
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<minnnum)
{
minnnum=num;
minnum=m;
}
else
{
minnum=(minnum<m)?minnum:m;
}
}
}
printf("Case %d: %d\n",k++,minnum);
}
return 0;
}
<pre name="code" class="cpp"><pre name="code" class="cpp">#include <iostream>
#include <stdio.h>
#include <memory.h>
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(sum<minx)
{
minx=sum;
minxx=number;
}
else if(sum==minx)
{
if(minxx>number)
minxx=number;
}
}
printf("Case %d: %d\n",k++,minxx);
}
return 0;
}