| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2236 人关注过本帖
标题:一串字母可以拼出的最大单词长度,求帮看看这个程序哪里有问题?
取消只看楼主 加入收藏
青蝶
Rank: 2
等 级:论坛游民
帖 子:160
专家分:51
注 册:2018-2-4
结帖率:92%
收藏
已结贴  问题点数:20 回复次数:6 
一串字母可以拼出的最大单词长度,求帮看看这个程序哪里有问题?
图片附件: 游客没有浏览图片的权限,请 登录注册

题目在附件里,代码如下。
#include<stdio.h>
#include<stdlib.h>
int Length(char *exemple){
  char c='1';
  int N,i,j,n,length_max=0,letter[26]={0},word[26]={0};
    for(i=0;i<20;i++){
        if(exemple[i]!='0')
          letter[exemple[i]-'a']++;
    }
    scanf("%d",&N);
    for(i=0;i<N;i++){
        n=0;
        scanf("%c",&c);
        while(c!='\n'){
            word[c-'a']++;
            n++;
            scanf("%c",&c);
        }
         for(j=0;j<26;j++){
            if(letter[j]<word[j]) break;
            if(j==25){
               if(length_max<n) length_max=n;
        }
    }
   }
  return length_max;
}
 
int main(void){
    char exemple[21]={'0'};
    while(scanf("%s",exemple)!=EOF){
        printf("%d\n",Length(exemple));
    }
    return 0;
    }
 
我的思路是把一个单词每个字母个数存到一个26个元素的整型数组里,比较每个单词里每个字母的个数是不是超过第一行给的字母串中相应字母的个数,超过了这个单词就舍去,没超过的记录下字母个数值,然后循环,找出字母个数最大值返回。

程序没法正确运行,求各位大佬帮忙看看错误在哪儿?
搜索更多相关主题的帖子: 字母 单词 int scanf 个数 
2018-05-07 13:15
青蝶
Rank: 2
等 级:论坛游民
帖 子:160
专家分:51
注 册:2018-2-4
收藏
得分:0 
回复 2楼 grmmylbs
谢谢大佬~可以运行了,但是时间超限了,想问问有没有可以优化的地方?
2018-05-07 17:32
青蝶
Rank: 2
等 级:论坛游民
帖 子:160
专家分:51
注 册:2018-2-4
收藏
得分:0 
回复 3楼 nosnoy
谢谢~大佬的程序比我的简洁多了,我写的那个还能不能优化一下
2018-05-07 17:38
青蝶
Rank: 2
等 级:论坛游民
帖 子:160
专家分:51
注 册:2018-2-4
收藏
得分:0 
第一次写OJ题,写得比较乱,算法也很笨,但还是想一点点优化,把自己的程序提交上去,希望各位大佬能指点一下,谢谢~
2018-05-07 17:45
青蝶
Rank: 2
等 级:论坛游民
帖 子:160
专家分:51
注 册:2018-2-4
收藏
得分:0 
回复 8楼 nosnoy
能通过,但是时间超限了。
2018-05-07 18:17
青蝶
Rank: 2
等 级:论坛游民
帖 子:160
专家分:51
注 册:2018-2-4
收藏
得分:0 
回复 11楼 九转星河
有人补充解释了一下:
那一列字母可以换顺序,abc和acb是一样的。
但是字母不能重复用,arry和r配的话返回1。
2018-05-07 21:28
青蝶
Rank: 2
等 级:论坛游民
帖 子:160
专家分:51
注 册:2018-2-4
收藏
得分:0 
回复 13楼 xzlxzlxzl
谢谢~我稍微改了一下大佬的代码,在Dev c++上能成功运行,不知道为什么在oj上运行错误?
#include<stdio.h>
#include<string.h>
int main(void){
  int i,j,k,n,max;
  int letters[26]={0},word[26]={0};
  char c[11]={0},d[21]={0};
  while(scanf("%s",d)!=EOF){
      for(i=0;d[i];i++) letters[d[i]-'a']++;
      scanf("%d",&n);
      for(max=0;n;n--){
          scanf("%s",c);
          memset(word,0,26*sizeof(int));
          for(i=0,j=0;c[i];i++){
              word[c[i]-'a']++;
              if(word[c[i]-'a']>letters[c[i]-'a']) break;
              j++;
          }
          if(!c[i]&&j>max) max=j;
      }
      printf("%d\n",max);
  }
   return 0;
}
         
2018-05-08 10:11
快速回复:一串字母可以拼出的最大单词长度,求帮看看这个程序哪里有问题?
数据加载中...
 
   



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

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