首页 > 试题广场 >

小红的字符串

[编程题]小红的字符串
  • 热度指数:304 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
\hspace{15pt}小红拿到了一个仅包含小写字母的字符串 s,下标从 1 开始。对于每个下标 p,如果 p 的二进制表示中 1 的个数是奇数,则将第 p 个字符转换成对应的大写字母。
\hspace{15pt}请你对字符串 s 进行上述修改,并输出最终结果。 

输入描述:
\hspace{15pt}每个测试文件均包含多组测试数据。第一行输入一个整数 T\left(1\leqq T\leqq 2 \times 10^3\right) 代表数据组数,每组测试数据描述如下: 
\hspace{15pt}输入一个长度为 1 \leqq {\rm len}(s) \leqq 500,仅包含小写字母的字符串 s


输出描述:
\hspace{15pt}对于每一组测试数据,新起一行,输出修改后的字符串。
示例1

输入

4
abcdefg
vwcvnwaomy
ovoxcfdtf
yynbve

输出

ABcDefG
VWcVnwAOmy
OVoXcfDTf
YYnBve
非常简单,写一篇答案
#include <bits/stdc++.h>
using namespace std;
int fun(int x){
    return x & -x;
}
int main() {
    int n,j=0;
    cin>>n;
    int c[500];
    for(int i=1;i<=500;i++){
        int m=i;
        int t=0;
        while(m>0){
            t++;
            m-=fun(m);
        }
        if(t%2!=0) {
             c[j++]=i;
        }
    }
    while(n--){
        string u;
        cin>>u;
        int q=0;
        while(c[q]-1<u.size()){
            u[c[q]-1]=u[c[q]-1]-32;
            q++;
        }
        cout<<u<<endl;
    }
    return 0;
}


发表于 2026-01-08 18:31:21 回复(0)