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

【题解】变换数组

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

【题目描述】

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


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

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

    分享给朋友:

    相关文章

    【题解】数学游戏

    【题目描述】Kri 喜欢玩数字游戏。 一天,他在草稿纸上写下了t 对正整数(x,y) ,并对于每一对正整数计算出了z=x*y*gcd(x,y);可是调皮的 Zay 找到了 Kri 的草稿纸,并把每一...

    【题解】分糖果

    【题目描述】小A在生日这天收到了哥哥送来的一盒糖果,这盒糖果共有M个,小A要把这盒糖果放到N个盘子中(允许有盘子不放),请问,有多少种不同的放法?请注意:数值相同,顺序不同,我们视为是相同的放法,比如...

    哥德巴赫猜想

    【题目描述】哥德巴赫猜想的命题之一是:大于6 的偶数等于两个素数之和。编程将6~100所有偶数表示成两个素数之和。【输入描述】无【输出描述】分行输出例如:6=3+38=3+5…(每个数只拆开一次,请保...

    【题解】剔除相关数

    【题目描述】一个数与另一个数如果含有相同数字和个数的字符,则称两数相关。现有一堆乱七八糟的整数,里面可能充满了彼此相关的数,请你用一下手段,自动地将其剔除。【输入描述】每组数据前有一个N(<10...

    数的拆分(1)

    【题目描述】任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和。例如:当n=7时7=1+1+1+1+1+1+1 7=1+1+1+1+1+2 7=1+1+1+1+3 7=1+1+1+2...

    字符全排列(2)

    【题目描述】从n个字符(n从a开始,依次递增)中选取r个字符,对r个字符进行不重复排列。字典序小的在前面。【输入描述】一行,n和r【输出描述】r个字符的所有组合,每种组合占一行,字符和字符之间用空格隔...