浙大hello world u借鉴答案,原理清晰

本文介绍了一个C++程序,它接收一个字符串作为输入,通过计算并创建一个二维矩阵来实现将字符串对称分割,使得每行和每列的字符相同。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include
using namespace std;

// 大家用笔和纸画一下就知道了
// 因为 x <= y; 且 2x + y = N - 2
// n1 = n3 = max { k| k <= n2 for all 3 <= n2 <= N }
// 因为x<=y 不妨取x的最大值 即 x=y 得下结果
// int n3 = (N + 2) / 3, n1 = n3, n2 = N - (n1 + n3);
// 用笔纸画一下就知道 因为这里的 / 是向下取整 所以n1 = n3 ,
// (接上)所以得到的n1 n3 是包含了 两个竖边与底边重叠多算的那两个字符
// 故而 n2 = N - 2*n1 n2 这里的n2 就是不包含重叠的 字符数量
int main() {
char buf[80];
while(cin>>buf){
string input=buf;
int N=input.length();
int n3=(N+2)/3,n1=n3,n2=N-n1-n3;
int L=n1,M=n2+2;
char matrix[L][M];
for(int i=0;i<L;++i)
for(int j=0;j<M;++j)
matrix[i][j]=’ ';
int index=0;
for(int i=0;i<L;++i){
matrix[i][0]=input[index++];
}
for(int i=1;i<=n2;++i)
matrix[L-1][i]=input[index++];
for(int j=L-1;j>=0;–j)
matrix[j][M-1]=input[index++];

    for(int i=0;i<L;++i){
        for(int j=0;j<M;++j)
        cout<<matrix[i][j];
    cout<<'\n';
    }
}

return 0;

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值