| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1399 人关注过本帖
标题:一道学校的编程题目,找不到出错的地方,求解了
只看楼主 加入收藏
仔太
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2017-11-16
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:9 
一道学校的编程题目,找不到出错的地方,求解了
图片附件: 游客没有浏览图片的权限,请 登录注册

程序代码:
#include<stdio.h>
#include<string.h>
#define FOR(i,n) for(i=0;i<n;i++)
int main()
{
    char str [105];
    int str2[105];//标记函数
    memset(str,0,sizeof(str));
    memset(str2,0,sizeof(str2));
    while(scanf("%s",str)!=EOF)
    {
        int n=strlen(str);
        int i,acount=0;
        FOR(i,n)
        {
            if(str[i]=='A'&str2[i]==0)//先找到A,再从前面或者后面查CM的字符;
            {
                if(i>=2&&str[i-1]=='C'&&str2[i-1]==0&&str[i-2]=='M'&&str2[i-2]==0)
                    acount+=1,str2[i]=str2[i-1]=str2[i-2]=1;
                else if(str[i+1]=='C'&&str2[i+1]==0&&str[i+2]=='M'&&str2[i+2]==0)
                    acount+=1,str2[i]=str2[i+1]=str2[i+2]=1,i+=2;
            }
        }
        if(3*acount!=n)//剩余元素判断
        {
            for(i=0; i+1<n; i++)
            {
                if(str2[i]==0&&str2[i+1]==0&&str[i+1]!=str[i])
                {
                    acount+=1;
                    break;
                }
            }
        }
        printf("%d\n",acount);
        memset(str,0,sizeof(str));
        memset(str2,0,sizeof(str2));
    }
    return 0;
}

实在找不出错在哪里,可以指出我的逻辑错误或者我少考虑哪一种情况呢?
搜索更多相关主题的帖子: 出错 str FOR int sizeof 
2017-12-15 10:52
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
收藏
得分:10 
1.小写怎么判断?
2.ACMMC你输出2,这应该输出1吧
if(str2[i]==0&&str2[i+1]==0&&str[i+1]!=str[i])这样判断应该不对
2017-12-15 11:06
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
收藏
得分:0 
另外你确定题目是以EOF结束字符串输入吗?
2017-12-15 11:10
仔太
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2017-11-16
收藏
得分:0 
回复 2楼 grmmylbs
1、题目中好像说的ACM这3个大写字母组成
2、万能字母可不可以插在最右边呢?字符中任意位置,不知道包不包括最右边的的位置。
3、EOF我们学校网站的格式。
2017-12-15 12:44
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:10 
是不是寻找

AC AM CM ACM

这么多个子串的总和呢~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-12-15 14:09
仔太
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2017-11-16
收藏
得分:0 
回复 5楼 九转星河
这道题目又说一个万能字母,我以为是acm倒过来也行!
2017-12-15 15:40
仔太
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2017-11-16
收藏
得分:0 
回复 5楼 九转星河
还是结吧,我觉得要么我理解题目有问题,或者题目本来就有问题
2017-12-15 15:47
mk_zhou
Rank: 2
来 自:历代兵家必争之地
等 级:论坛游民
威 望:1
帖 子:78
专家分:83
注 册:2015-6-30
收藏
得分:0 
确定while循环里的内容会执行到么?

仰望星空,看看有没有馅饼落下
2017-12-15 16:21
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
话说,5楼也是没有认真看题的~
其实就是ACM子串和加1或者加0,至于加1或者加0就要看看存不存在子串AC AM CM
因为ACM子串ASCII码互不相同,所以不用考虑子串重叠部分~

PS:还有嘛,这么短的子串,而且输入字符串长度数据范围又不大,为啥不用strstr?~感觉用strstr方便多了~

[此贴子已经被作者于2017-12-15 16:37编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-12-15 16:31
mk_zhou
Rank: 2
来 自:历代兵家必争之地
等 级:论坛游民
威 望:1
帖 子:78
专家分:83
注 册:2015-6-30
收藏
得分:0 
可以看下我修改后的代码是否符合题目要求
程序代码:
#include<stdio.h>
#include<string.h>
#define FOR(i,n) for(i=0;i<n;i++)
int main()
{
    char str[105];
    int str2[105];//标记函数
    memset(str, 0, sizeof(str));
    memset(str2, 0, sizeof(str2));
    while (gets_s(str,105)&& strcmp(str,"EOF")!=0)
    {
        int n;
        n= strlen(str);
        int i=0, acount = 0;
        FOR(i, n)
        {
            if (str[i] == 'A'&&str2[i] == 0)//先找到A,再从前面或者后面查CM的字符;
            {
                if (i >= 2 && str[i - 1] == 'C'&&str2[i - 1] == 0 && str[i - 2] == 'M'&&str2[i - 2] == 0)
                    acount += 1, str2[i] = str2[i - 1] = str2[i - 2] = 1;
                else if (str[i + 1] == 'C'&&str2[i + 1] == 0 && str[i + 2] == 'M'&&str2[i + 2] == 0)
                    acount += 1, str2[i] = str2[i + 1] = str2[i + 2] = 1, i += 2;
            }
        }
        if (3 * acount != n)//剩余元素判断
        {
            for (i = 0; i + 1<n; i++)
            {
                if (str2[i] == 0 && str2[i + 1] == 0 && str[i + 1] != str[i])
                {
                    acount += 1;
                    break;
                }
            }
        }
        printf("%d\n", acount);
        memset(str, 0, sizeof(str));
        memset(str2, 0, sizeof(str2));
    }
    return 0;
}

仰望星空,看看有没有馅饼落下
2017-12-15 16:41
快速回复:一道学校的编程题目,找不到出错的地方,求解了
数据加载中...
 
   



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

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