问题标题: 酷町堂:3873 最多的“1”

0
0
已解决
李显晨
李显晨
中级启示者
中级启示者

3873   最多的“1”        经验值:0

题目描述 Description

输入n个十进制数(10000以内),求出其对应的二进制数,然后输出包含最多个1的二进制数所对应的十进制数,如果有多条记录,输出最先输入的那一条记录。

输入描述 Input Description

第一行,一个整数n(不超过1000)
接下来n行,每行一个十进制数(不超过10000)

输出描述 Output Description

包含最多个1的二进制数所对应的十进制数

样例输入 Sample Input

5

10

15

31

62

43

样例输出 Sample Output

31

数据范围及提示 Data Size & Hint

10对应的二进制数为1010,包含2个1
15对应的二进制数为1111,包含4个1
31对应的二进制数为11111,包含5个1
62对应的二进制数为111110,包含5个1
43对应的二进制数为101011,包含4个1

其中包含最多1的有11111和111110,其中先输入的是31,所以最后结果为31

 

错误代码:

#include<iostream>
#include<string>
using namespace std;
long long a[1005],b[1005],cnt,maxn,s;
int main(){
    long long n,t=1,w,pos;
    cin>>n;
    for(int i=1;i<=n;i++){
    	cin>>a[i];
    	t=a[i];
    	cnt=0;
		while(a[i]!=0){
        	b[++s]=a[i]%2;
        	a[i]/=2;
        	if(b[s]==1) cnt++;
    	}
    	if(cnt>maxn){
    		maxn=cnt;
			pos=t; 
		} 
	}
	cout<<pos;
    return 0;
}

大佬找错!!!

李显晨在2020-09-19 12:40:36追加了内容

按照@康曦 的说法,改成了80分

#include<iostream>
#include<string>
using namespace std;
long long a[10005],b[10005],cnt,maxn,s;
int main(){
    long long n,t,w,pos;
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        t=a[i];
        cnt=0;
        while(a[i]!=0){
            b[++s]=a[i]%2;
            a[i]/=2;
            if(b[s]==1) cnt++;
        }
        if(cnt>maxn){
            maxn=cnt;
            pos=t; 
        } 
    }
    cout<<pos;
    return 0;
}

 


0
已采纳
黄依成
黄依成
中级天翼
中级天翼

数组再大一点,10万就能AC了。。。。。。

0
0
我要回答