GESP 2024.6 三级 编程大题——讲解(全网首发!!!)

UP今天考试,GESP-三级。

发现试卷贼难(哭)

第二题没做出来。

看在UP可怜的份上,多关注,多收藏,万分感谢!

所有题目均为回忆,大致意思相同即可

题目一:顺移字符串

输入一个整数n,输出大写字母表ABCDEFGHIJKLMNOPQRSTUVWXYZ顺移n位的值。

1<=n<=100

N=3;

‘A’--->'D'

'B'--->'E'

'Z'--->'C'

.......

那么,如何写呢?

众所周知‘A’+3='A'的ASCII(65)+3='A’的后三位=‘D’

因此可先这么写:

char a[26]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};

int n,i;
cin>>n;

for(i=0;i<26;i++)
{
    a[i]+=n;
    cout<<a[i];
}

但是,当你输入任何一个数时。

'Z'会有大问题。

有同学问了“什么问题?”

输出结果如下:DEFG.......Z[\]

????

为什么会这样?

因为‘Z’+3=']'

那如何解决呢?

减去一个字母表的长度即可。

​
char a[26]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};

int n,i;
cin>>n;

for(i=0;i<26;i++)
{
    a[i]+=n;
    if(a[i]>90)    
    {
    a[i]-=26;
    }
    cout<<a[i];
}

​

代码如下:

#include <bits/stdc++.h> 
using namespace std;
int main( )
{
	char a[26]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};

int n,i;
cin>>n;

for(i=0;i<26;i++)
{
    a[i]+=n;
    if(a[i]>90)    
    {
    a[i]-=26;
    }
    cout<<a[i];
}




	return 0; 
}

优化,改进:

当输入一个26的两倍以上的数的话,程序会出现以下情况:

蘇唼勥......(乱码)

因此可以将其除掉26之后再计算。

完整代码如下:

#include <bits/stdc++.h> 
using namespace std;
int main( )
{
	char a[26]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};

int n,i;
cin>>n;
n/=26;
for(i=0;i<26;i++)
{
	
    a[i]+=n;
    if(a[i]>90)    
    {
    a[i]-=26;
    }
    cout<<a[i];
}




	return 0; 
}

你学废了吗??

点赞+关注过15更第二道编程题!

拜拜

  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值