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

题目在附件里,代码如下。
#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
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
收藏
得分:6 
有两个问题:
1.scanf输入数字后的回车没有清掉就开始读字符;
2.word每次没清零
程序代码:
#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;
        memset(word,0,26*sizeof(int));
        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;
}
2018-05-07 15:48
nosnoy
Rank: 9Rank: 9Rank: 9
来 自:mcu
等 级:贵宾
威 望:14
帖 子:541
专家分:1178
注 册:2016-9-17
收藏
得分:4 
尝试着套代码
程序代码:
#include<stdio.h>
#include<string.h>

 
int a=0;
char c[100];
int max=0;
int b=0x0000001;
int n;
char arr[26];
void fun(char arr[])
{
     for(int i=0;i<strlen(arr);i++)
      a=a|b<<arr[i]-'A';  
}
int fun1(char arr[])
{
    int ma=0;
    for(int i=0;i<strlen(arr);i++)
       {
    if(a==(a|b<<arr[i]-'A'))
        ma++;    
    else
    {
        ma=0;
        break;
    }
    } 
    return ma;
     
}
void main()
{    
    int num;
    scanf("%s",arr);
    fun(arr);        
    scanf("%d",&n);
    while(n--)
    {
         scanf("%s",c);
        num=fun1(c);
        max=max>num?max:num;
    }
    printf("%d",max);
}

穷举是最暴力的美学
2018-05-07 16:44
青蝶
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
nosnoy
Rank: 9Rank: 9Rank: 9
来 自:mcu
等 级:贵宾
威 望:14
帖 子:541
专家分:1178
注 册:2016-9-17
收藏
得分:0 
回复 5楼 青蝶
不能通过吗 ?

穷举是最暴力的美学
2018-05-07 17:55
nosnoy
Rank: 9Rank: 9Rank: 9
来 自:mcu
等 级:贵宾
威 望:14
帖 子:541
专家分:1178
注 册:2016-9-17
收藏
得分:0 
回复 6楼 青蝶
你这算法没问题啊 你按照2楼的改下就ok了 实在不行你先读取字符串在进行word的增减啊

穷举是最暴力的美学
2018-05-07 18:16
青蝶
Rank: 2
等 级:论坛游民
帖 子:160
专家分:51
注 册:2018-2-4
收藏
得分:0 
回复 8楼 nosnoy
能通过,但是时间超限了。
2018-05-07 18:17
nosnoy
Rank: 9Rank: 9Rank: 9
来 自:mcu
等 级:贵宾
威 望:14
帖 子:541
专家分:1178
注 册:2016-9-17
收藏
得分:0 
搬个板凳坐等大佬解答

穷举是最暴力的美学
2018-05-07 18:29
快速回复:一串字母可以拼出的最大单词长度,求帮看看这个程序哪里有问题?
数据加载中...
 
   



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

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