青少年编程知识记录 codecoming

【题解】变换数组

【题目描述】

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



作者:亿万年的星光 分类:题解目录 浏览: