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;
}