标题:一道C语言题
取消只看楼主
小李探花
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2016-12-17
结帖率:0
已结贴  问题点数:20 回复次数:13 
一道C语言题
给定一个字符串"S"和整数L和M,我们认为字符串"S"存在"可回收"子串,这个子串必须当且仅当满足以下条件
(i)它的长度是M*L;

(ii)可以通过M个长度为L的"多元子串"子串来构造;
如果两个子字符串每个位置的字符都不一样,那么这两个子字符串可以当作为"多元子串"
如果从字符串"S"的不同位置里截取两段字符串,那么这两个子串是"不同的",例如,字符串"AA"有3个不同的子串"AA"、"A"和"A"。

你的任务是计算出不同的"可回收"子串

输入格式
第一行,要用空格符分开整数M和L
第二行,要有一个全小写字符串S,并且要长度要大于 M * L ,要小于10^5。且1 ≤ M * L;

输入例子
3 3
abccabcac
搜索更多相关主题的帖子: C语言 字符串 回收 
2016-12-17 23:22
小李探花
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2016-12-17
得分:0 
变相求子串的题,哪位帮个忙啊
2016-12-17 23:23
小李探花
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2016-12-17
得分:0 
回复 3楼 九转星河
应该是的
2016-12-17 23:56
小李探花
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2016-12-17
得分:0 
回复 6楼 九转星河
版主能帮忙敲个源代码出来试试吗
2016-12-18 00:10
小李探花
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2016-12-17
得分:0 
回复 9楼 九转星河
之前一朋友帮我写过,不过我这里只有可执行文件跟一点点残代码。我用可执行文件运行了一下,截了个图,版主看看。


如图,题目所谓的“可回收子串”,首先长度要是你输入的L*M,比如图中是2*3=6,但是你输入的字符串S长度要大于L*M,比如图中我输入了9个。那么有人会问为什么满足条件的可回收子串只有图中的两个,“cabbac”为什么不是,之所以不是是因为题目中还规定了“可回收子串”必须能由M个长度为L的“多元子串”来构造,而题目中规定“多元子串”的子字符串每个位置的字符都不一样,所以“cabbac”可以拆成“cab”“bac”这两个子串,但是这两个子串第二个位置都是a,所以“cabbac”不是字符串“S”的“可回收子串”。版主看完了我说的之后能帮忙敲出源代码么,我虽然理解了但是感觉敲出来还是费劲
2016-12-18 01:02
小李探花
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2016-12-17
得分:0 
回复 12楼 九转星河
明天白天能敲出来吗,我明天晚上有急用,然后自己手头上还有其他题目要做,只能靠版主你帮我这个忙了
2016-12-18 01:23
小李探花
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2016-12-17
得分:0 
回复 14楼 九转星河
可是只有版主你回了我啊
2016-12-18 01:30
小李探花
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2016-12-17
得分:0 
回复 14楼 九转星河
版主再帮我看看这个代码问题在哪里

44到46行那里出了问题

原题是用一个数组存放图书信息,每本包含书名,作者,出版年月,出版社,借出数目,库存数目等信息。编写程序输入若干本图书的信息,再按出版年月排序后输出。
2016-12-18 01:33
小李探花
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2016-12-17
得分:0 
程序代码:
#include <stdio.h>  
#include <stdlib.h>  
struct Data {  

 int year;  

 int month;  

 int day;  
};  
  
struct library {  

 char booktitle[50];  

 char author[10];  

 struct Data data;  

 char publishunit[100];  

 int lendnum;  

 int stocknum;  
};  
  
int main() {  

 int i, j, n, temp = 0;  

 struct library book[n];  

 printf("请输入要处理的图书数量:\n");  

 fflush(stdout);  

 scanf("%d", &n);  

 for (i = 0; i < n; i++) {  
  printf("请输入第%d本书的信息:\n", i + 1);  
  printf("书名:");  
  fflush(stdout);  
  scanf("%s", &book[i].booktitle);  
  printf("作者:");  
  scanf("%s", &book[i].author);  
  printf("出版年月:");  
  scanf("%s", &book[i].data);  
  printf("出版社:");  
  scanf("%s", &book[i].publishunit);  
  printf("借出数:");  
  scanf("%s", &book[i].lendnum);  
  printf("库存数:");  
  scanf("%s", &book[i].stocknum);  

 }  

 for (i = 0; i < n - 1; i++) {  
  for (j = i + 1; j < n; j++) {  
   if (book[i].publishunit < book[j].publishunit) 
   {  
    temp = book[i];  
    book[i] = book[j];  
    book[j] = temp;  
   }  
  }  
  printf("\n排序后的图书信息:");  
  for (i = 0; i < n; i++) {  
   printf("\n书名:  %s\n, 作者:  %s\n, 出版年月:  %s\n, 出版社:  %s\n, 借出数:  %s\n, 库存数:%s\n",  book[i].booktitle, book[i].author, book[i].data,  book[i].publishunit, book[i].lendnum, book  [i].stocknum);  
  }  

 }  

 return EXIT_SUCCESS;  
}  
2016-12-18 01:34
小李探花
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2016-12-17
得分:0 
回复 18楼 九转星河
这个我测试了一下,没法求出所有的可回收字串,按照我之前那张截图测试的,L和M分别输入了2和3,然后输入了abccabbac,只求出了一个可回收字串“abccab”
2016-12-18 11:34



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-472540-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.502971 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved