搜索
bottom↓
回复: 9

信息奥赛题 求一个括号串有多少个有效匹配字串

[复制链接]

出0入4汤圆

发表于 2020-10-19 10:14:07 | 显示全部楼层 |阅读模式
信息奥赛题 求一个括号串有多少个有效匹配字串

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入71汤圆

发表于 2020-10-19 10:59:13 | 显示全部楼层
#include "stdafx.h"

typedef struct  _SX
{
        int x;
        int y;
        char * p;
        int n;
}SX;


//char strTest[] = ")sd)xx)(as)xxff(()(sdf))(9s(s(xx)))sf(sx)(99(00";
char strTest[] = "(as)xxff(()(sdf()())))(";
int findStr(char * lp)
{
        SX sx[100];
        int i;
        int j;
        int n;
        int idxSp;
        char st[1000];
        int idxStr;
        int nStr;

        idxSp = -1;
        idxStr = 0;
        nStr = 0;
        n = strlen(lp);
        for (i = 0; i < n; i++)
        {
                if (lp[i] == '(')
                {
                        idxSp++;
                        sx[idxSp].n = 1;
                        sx[idxSp].p = &lp[i];
                        sx[idxSp].x = i;
                        sx[idxSp].y = i;
                }
                else if (lp[i] == ')')
                {
                        if (idxSp >= 0)
                        {
                                nStr++;
                                memcpy(&st[0], sx[idxSp].p, sx[idxSp].n);
                                st[sx[idxSp].n] = 0;
                                idxSp--;
                        }
                }
                else
                {
                        if (idxSp >= 0)
                        {
                                sx[idxSp].n++;
                                sx[idxSp].y++;
                        }
                }
        }
        printf("Total = %d\n", nStr);
        return nStr;
}
int main()
{
        findStr(strTest);
    return 0;
}

出0入71汤圆

发表于 2020-10-19 10:59:54 | 显示全部楼层
本帖最后由 dellric 于 2020-10-19 11:00 编辑

试试看上面的代码是不是你需要的,可以直接拷贝到VS里面运行测试。

出0入0汤圆

发表于 2020-10-19 11:39:50 | 显示全部楼层
这题是信息学奥赛的初级还是高级的?楼主介绍一下学习经验呗。

出0入93汤圆

发表于 2020-10-19 11:53:18 | 显示全部楼层
dellric 发表于 2020-10-19 10:59
#include "stdafx.h"

typedef struct  _SX

你这个显然不对。
比如strTest =((a)(b)(c)),按你的算法算出来是4,但实际上应该是7 :(a)、(b)、(c)、(a)(b)、(b)(c)、(a)(b)(c)、((a)(b)(c))。如果遇到字串相同还要进一步增加复杂度。

出0入8汤圆

发表于 2020-10-19 11:54:59 | 显示全部楼层
dellric 发表于 2020-10-19 10:59
#include "stdafx.h"

typedef struct  _SX


题目理解错了,题目的意思是合法的括号串只由()这两个符号组成。可以包含,可以结合。
() 1个         S(1,2)
(()) 2个      S(2,3), S(1,4)
(()()) 4个    S(2,3) S(4,5), S(2,5), S(1,6)

如果没有学过词法分析相关内容,不要去想这道题目如何做,直接跳过就行,不寒碜

出0入4汤圆

 楼主| 发表于 2020-10-19 11:55:44 | 显示全部楼层
hwarm 发表于 2020-10-19 11:39
这题是信息学奥赛的初级还是高级的?楼主介绍一下学习经验呗。

没啥心得  孩子参加几年了 都是重在参与

出10入284汤圆

发表于 2020-10-19 13:06:34 来自手机 | 显示全部楼层
还是动态规划

出0入0汤圆

发表于 2020-10-19 16:24:53 | 显示全部楼层
billtian 发表于 2020-10-19 11:55
没啥心得  孩子参加几年了 都是重在参与

那可以啊,你家孩子多大开始学的,有没有报班,还是自己辅导的?我打算让孩子试试,准备开始学了。

出0入4汤圆

 楼主| 发表于 2020-10-20 08:28:59 | 显示全部楼层
hwarm 发表于 2020-10-19 16:24
那可以啊,你家孩子多大开始学的,有没有报班,还是自己辅导的?我打算让孩子试试,准备开始学了。 ...


小学五年级开始 五六年级报了两年班拿了两个小奖  初中三年学习紧竞赛帮助也不大 没有报班也没投太多精力 只参加了两次考试,现在高中了 竞赛有一定作用 打算拾起来 无奈时间比初中更少了 难啊
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-16 22:29

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表