【题解】变换数组
【题目描述】
输入一个数组 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; }
扫描二维码推送至手机访问。
版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。