当前位置:首页 > 题解目录 > 正文内容

【题解】翻手算法

亿万年的星光5年前 (2021-05-01)题解目录23391

翻手算法(fanshou.cpp) 

【问题描述】 

⼩酷爱算法,他在编程珠玑⼀书中了解到了⼀种新的算法——翻⼿算法,为了更好的理解算 法,⼩明找来⼀叠纸牌,每⼀张纸牌上只有⼀个⼤写或⼩写的英⽂字母,他先把这叠纸牌进⾏洗牌操 作,假设洗牌后纸牌从第⼀张到最后⼀张的顺序是azxbcdy,然后按算法中介绍的那样,选择了⼀个翻⼿点 2。接着进⾏翻⼿操作: 第⼀次翻⼿,将前2张纸牌进⾏逆序排列,得到zaxbcdy; 第⼆次翻⼿,将剩下的5张纸牌进⾏逆序排列,得到zaydcbx; 第三次翻⼿,将现在的牌堆顺序进⾏逆序排列,得到xbcdyaz; 假设我们输入一行小写字母表示这叠纸牌的初始顺序,输入整数k作为翻手点,请你编写程序输出经 过三次翻手后的字符串。 

【输入格式】

 第一行:一行字符串,仅由大小写英文字母构成。 第二行:⼀个正整数k,表示翻手点。 

【输出格式】

 一行字符串,经过翻手算法后的字符串。 

【样例输入】

azxbcdy
2

【样例输出】

xbcdyaz


【数据规模和约定】

30%  0<字符串⻓度<100

0<字符串长度<=1e5,0<k<=字符串长度

【题目分析】

  • 比较简单的字符串模拟题。

  • 可以以“翻手点”为基准,左右两侧使用不同的放法进行操作,左侧逆序,右侧逆序。(题目出的不好,第一次和第二次完全没有影响,所以可以由一个for循环实现)。

  • 最后再进行一次逆序操作就行。



【参考代码】

#include<bits/stdc++.h>
using namespace std;
int main(){
	char a[1000],b[1000];
	int fs;
	int len,l,r;
	cin>>a; //字符串
	cin>>fs; //翻手点
	len=strlen(a);
	l=fs-1;  //翻手点坐标
	r=len-1; //末尾点坐标
	for(int i=0;i<len;i++){
		if(i<fs){  //如果是翻手点前的
			b[i]=a[l--];
		} 
		else{ //翻手点后的 
			b[i]=a[r--];
			} 
	}
	for(int i=0;i<len;i++){  //整体逆序
		a[i]=b[len-i-1];
	}
	cout<<a;
	return 0;
}


    扫描二维码推送至手机访问。

    版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。

    分享给朋友:

    相关文章

    进制转换(1)

    【题目描述】毛毛是个健忘的孩子,编程课上老师刚讲过进制转换的问题,她又忘了。请你帮他编写一个程序,完成一个浮点数与二进制之间的相互转换【输入描述】两个数字,第一个数字表示要转换的数字,浮点型。第二个是...

    【题解】开花

    【题解】开花

    【题目描述】小A所在的学校又迎来了一年一度的开花活动,有 n 名学生被评为文学优秀奖,m 名学生被评为体育优秀奖。现已知两个奖项获奖同学的编号,每个同学都有唯一的编号。只有同时被评为文学优秀奖和体育优...

    【题解】线段

    【题目描述】在一个数轴上有n条线段,现选取其中k条线段使得这k条线段两两没有重合部分,问最大的k为多少?【输入描述】第一行为一个正整数n,下面n行每行2个数字ai,bi,描述每条线段。【输出描述】输出...

    素数个数

    【题目描述】编程求2~n(n为大于2的正整数)中有多少个素数。【输入描述】输入n (2<= n <=50000)【输出描述】素数个数【输入样例】10【输出样例】4#include<i...

    【题解】合根植物

    【题解】合根植物

    【题目描述】w星球的一个种植园,被分成 m * n 个小格子(东西方向m行,南北方向n列)。每个格子里种了一株合根植物。这种植物有个特点,它的根可能会沿着南北或东西方向伸展,从而与另一个格子的植物合成...

    植树节

    【题目描述】植树节快要到了,学校要组织志愿者去给树苗浇水。有一排树苗,编号依次是 0,1,2, . . . 。现有 n个志愿者去给树苗浇水,第 i 个志愿者选定了一个区间[ai, bi],表示第 i个...