杭电oj2019c语言答案,杭电oj 2074(正确答案,不能AC)

本文探讨了一种复杂字符交换问题的解决方案,通过将叠框拆分为小框并使用字符数组存储,成功实现了每行按规律交换字符。博客详细介绍了正确思路和关键代码片段,展示了如何避免错误的迭代方式,最终与标准答案保持一致。
摘要由CSDN通过智能技术生成

c2c1808d6442

image.png

错误思路:每一次输出一个字符,根据条件判断,交换两个字符,在第一行不交换,第二行前后共交换两次,以此类推,在中间那一行达到每输出一个字符就交换一次。

出现问题:无法拟定一个正确的公式来满足交换规律,难度较高。

正确思路:将叠框拆分成一个个小框,用字符数组将其储存起来,每一个框存入数组后进行字符交换

代码如下:

#include

#include

int main()

{

int t, i, j,k,q=1;

char n, m, temp;

char a[100000];

while (scanf("%d %c %c", &t, &n, &m) != EOF)

{

if (t % 2 == 0 || t < 1 || t>79) break;

if (q != 1) printf("\n");//为了满足输出格式要求,需要在每一个叠框之间输出换行。

if ((t / 2 + 1) % 2 == 1)//因为要从最外面一圈开始存入,需要判断最外圈的字符是n还是m,默认是m,如果不是就交换两个字符。

{

temp = m;

m = n;

n = temp;

}

for (i = 0; i < t/2+1; i++)//一共有多少圈,计算圈数

{

for (j = i; j

{

for (k = i; k < t-i; k++)//行同上。

{

a[j*t+k] = m;//字符在数组里,根据其行列位置进行储存

}

}

temp = m;//储存后字符交换

m = n;

n = temp;

}

a[0] = ' ';//将四个角字符替换成空格

a[t-1] = ' ';

a[t*(t - 1)] = ' ';

a[t*t-1] = ' ';

for (i = 1; i <=t*t; i++)

{

printf("%c", a[i-1]);

if (i % t== 0&&i!=0) printf("\n");

}

q++;

}

}

c2c1808d6442

image.png

经过对比,与网络上标准答案输出结果一模一样。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值