题目描述:
在数学中,某个序列的子序列是从最初序列通过去除某些元素但不破环余下元素的相对位置(在前或在后)而形成的新序列。给定一个字符串s和整数k,将s划分成k个子系列,每个子系列的相邻元素在原来s中的下标差值正好为k。
输入:
仅一行,包含空格分开的字符串s和整数k。字符串s全部由大写字母构成,且长度不超过100.1<k<=min(10,strlen(s)).
输出:
依次输出s划分成的k个子系列,具体格式见样例
样例输入:
ABCDEFGH 3
样例输出
ADG BEH CF
源代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char ch[100];
int k=0;
int len=0;
scanf("%s",ch);
scanf("%d",&k);
len=strlen(ch);
printf("输入的字符串为:%s\n",ch);
printf("要分裂的子序列数为:%d\n",k);
printf("字符串长度为:%d\n",len);
for(int i=0;i<k;i++){
for(int j=i;j<len;j=j+k){
printf("%c",ch[j]);
}
printf("\n");
}
return 0;
}
解题思路
1.输入数据 2.通过strlen函数求得字符串长度(注意要导入string.h库) 3.代码中关键是有个循环嵌套,外循环作用是要输入几个子序列(即输出几行),内循环则就是输出每个子序列(即每行中)的内容。 4.在内循环中,先确定子序列第一个要输出什么,显然第一个子序列要输出的的第一个字母就是字符串的第一个字母,第二个子序列要输出的第一个字母就是字符串中的第二个字母,以此类推。 5.由于题目要求“每个子系列的相邻元素在原来s中的下标差值正好为k。 ”,所以内循环每次循环,j会加3
|