【题解】变换数组
【题目描述】
输入一个数组 a,包含有 n 个元素 a1,a2,⋯,an。对这个数组进行 m 次变换,每次变换会将数组 a 中的每个元素 ai 转换为 ai⋅bitCount(ai)。其中 bitCount(x) 表示数字 x 的二进制表示中 1 出现的次数,例如 bitCount(3)=2,因为 3 的二进制表示为 11,其中 1 出现了两次。
请输出变换之后的数组内容。
【输入描述】
输入的第一行包含一个正整数 n,表示数组 a 中的元素个数。
第二行包含 n 个整数 a1,a2,⋯,an,相邻整数之间使用一个空格分隔。
第三行包含一个整数 m,表示变换次数。
【输出描述】
输出一行,包含 n 个整数,相邻整数之间使用一个空格分隔,表示变换之后得到的数组 a。
【样例输入】
2 5 7 2
【样例输出】
20 63
【样例说明】
,,第一次变化后 。
,,第二次变换后 。
【数据范围】
对于30%的数据,1<=n<10
对于60%的数据,1<=n<=100
对于100%的数据,1<=n<=100, 0<=m<=5,0<=ai<=1000
【题目分析】
转成二进制,统计 1 个数。
【参考答案】
#include<bits/stdc++.h>
using namespace std;
int a[1005];
int num(int x){
int cnt=0;
while(x>0){
x=x&(x-1);
cnt++;
}
return cnt;
}
int main(){
int n,m;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
cin>>m;
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
a[j]=a[j]*num(a[j]);
}
}
for(int j=1;j<=n;j++){
cout<<a[j]<<" ";
}
cout<<endl;
return 0;
}扫描二维码推送至手机访问。
版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。
