当前位置:首页 > 题解目录 > 正文内容

【题解】变换数组

亿万年的星光7个月前 (04-18)题解目录639

【题目描述】

输入一个数组 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;
}


扫描二维码推送至手机访问。

版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。

分享给朋友:

相关文章

【题解】登山

【题解】登山

【题目描述】五一到了,ACM队组织大家去登山观光,队员们发现山上一共有N个景点,并且决定按照顺序来浏览这些景点,即每次所浏览景点的编号都要大于前一个浏览景点的编号。同时队员们还有另一个登山习惯,就是不...

【题解】周末舞会

【题目描述】假设在周末舞会上,男士们和女士们进入舞厅时,各自排成一队。跳舞开始时,依次从男队和女队的队头上各出一人配成舞伴。规定每个舞曲能有一对跳舞者。若两队初始人数不相同,则较长的那一队中未配对者等...

【动态规划】完全背包

【题目描述】设有n种物品,每种物品有一个重量及一个价值。但每种物品的数量是无限的,同时有一个背包,最大载重量为m,今从n种物品中选取若干件(同一种物品可以多次选取),使其重量的和小于等于m,而价值的和...

【题解】求次方和

【题目描述】    求解 (2^0 + 2^1 + 2^2+ ... + 2^n) % 2333【输入描述】    一行,一个整数n。【输出...

【题解】移动路线

【题目描述】X桌子上有一个m行n列的方格矩阵,将每个方格用坐标表示,行坐标从下到上依次递增,列坐标从左至右依次递增,左下角方格的坐标为(1,1),则右上角方格的坐标为(m,n)。小明是个调皮的孩子,一...

【题解】前缀最大值

【题目描述】求一个数列的所有前缀最大值之和。即:给出长度为n的数列a[i],求出对于所有1<=i<=n,max(a[1],a[2],...,a[i])的和。比如,有数列:666 304 6...