首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 东软练习题 [已结贴,结贴人:xiangzi1008]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-04 15:17:36 楼主
    在1 2 3 4 5 6 7 8 9九个数字中插入“+”或“-”符号使得结果为100,编程实现所有的组合。
    注:数字的顺序不能改变。
    如: 123 - 45 - 67 + 89 = 100
          12 - 3 -4 + 5 - 6 + 7 + 89 = 100
    100  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-04 15:24:581楼 得分:0
    sf后慢慢想
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-04 15:31:472楼 得分:0
    关注
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-04 15:33:303楼 得分:0
    BD
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-04 15:42:544楼 得分:20
    C/C++ code
    #include "Cal.h" void DelSpace(char* str) { char* curr = str; while (*curr=*str++) if (*curr!=' ') curr++; } void GetExpression(int a[], int n) { static char token[] = {'+','-',' '}; static char buff[256]; static CAL cal; sprintf(buff, "1%c2%c3%c4%c5%c6%c7%c8%c9", token[a[0]], token[a[1]], token[a[2]], token[a[3]], token[a[4]], token[a[5]],token[a[6]], token[a[7]]); DelSpace(buff); // cout << buff << endl; int result = cal.Evalue(buff); if (cal.GetError() == "OK" && result == 100) cout << buff << '=' << result << endl; } void DoEnum(int n, int curr, int to[]) { if (curr == n) { GetExpression(to, n); } else { for (int i = 0; i < 3; ++i) { to[curr] = i; DoEnum(n, curr+1, to); } } } int main() { int to[8]; DoEnum(8, 0, to); return 0; } 1+2+3-4+5+6+78+9=100 1+2+34-5+67-8+9=100 1+23-4+5+6+78-9=100 1+23-4+56+7+8+9=100 12+3+4+5-6-7+89=100 12+3-4+5+67+8+9=100 12-3-4+5-6+7+89=100 123+4-5+67-89=100 123+45-67+8-9=100 123-4-5-6-7+8-9=100 123-45-67+89=100 Press any key to continue
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • chlaws
    • 等级:
    发表于:2008-05-04 15:44:225楼 得分:0
    mark
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-04 15:48:016楼 得分:0
    引用 5 楼 chlaws 的回复:
    mark
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-04 15:49:307楼 得分:0
    mark 学习
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-04 15:56:508楼 得分:0
    "Cal.h"
    也贴出来看看
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-04 15:57:239楼 得分:0
    引用 4 楼 baihacker 的回复:
    C/C++ code#include "Cal.h"
    void    DelSpace(char* str)
    {
        char* curr = str;
        while (*curr=*str++)
            if (*curr!=' ') curr++;
    }
    void    GetExpression(int a[], int n)
    {
        static char token[] = {'+','-',' '};
        static char buff[256];
        static CAL    cal;

        sprintf(buff, "1%c2%c3%c4%c5%c6%c7%c8%c9",
            token[a[0]], token[a[1]], token[a[2]], token[a[3]],
          …

    弱弱的问一句:Cal.h 在哪里?自己写的,还是自带的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-04 16:00:5710楼 得分:0
    Cal是自己写的....由于写得太烂,不好意思贴出来
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-04 16:03:2111楼 得分:0
    引用 5 楼 chlaws 的回复:
    mark
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-04 16:04:2712楼 得分:0
    发现飞雪太nb了吧,,到算法板块,那的版主岂不没饭吃了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-04 16:04:2913楼 得分:0
    mark
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-04 16:05:2114楼 得分:0
    说说思想
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-04 16:05:5115楼 得分:0
    继续关注!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-04 16:09:0116楼 得分:0
    给一个表达式,进行语法分析...是基本能力
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-04 16:28:1717楼 得分:0
    C/C++ code
    //重新写的一个简单的CAL #include <iostream> using namespace std; class CAL { enum{NUMBER, OPERATOR, END, UNKNOWN}; class Token { public: int value; int type; }; const char* buff; int curr; Token tk; public: int Evalue(const char* exp) { int value = 0; int sign = 1; buff = exp; curr = 0; do{ MoveToNextToken(); switch (tk.type) { case NUMBER: value += sign * tk.value;break; case OPERATOR: sign = tk.value == '+' ? 1 : -1; } }while (tk.type==NUMBER||tk.type==OPERATOR); return value; } void MoveToNextToken() { static char temp[256]; tk.type = UNKNOWN, tk.value = 0; if (!buff[curr]) { tk.type = END; return; } if (buff[curr]>='0'&&buff[curr]<='9') { int value = 0; while (buff[curr]&&buff[curr]>='0'&&buff[curr]<='9') value = value * 10 + buff[curr++] - '0'; tk.value = value; tk.type = NUMBER; return; } switch (buff[curr++]) { case '+': tk.type = OPERATOR, tk.value = '+';return; case '-': tk.type = OPERATOR, tk.value = '-';return; } tk.type = UNKNOWN; return; } }; void DelSpace(char* str) { char* curr = str; while (*curr=*str++) if (*curr!=' ') curr++; } void GetExpression(int a[], int n) { static char token[] = {'+','-',' '}; static char buff[256]; static CAL cal; sprintf(buff, "1%c2%c3%c4%c5%c6%c7%c8%c9", token[a[0]], token[a[1]], token[a[2]], token[a[3]], token[a[4]], token[a[5]],token[a[6]], token[a[7]]); DelSpace(buff); // cout << buff << endl; int result = cal.Evalue(buff); if (result == 100) cout << buff << '=' << result << endl; } void DoEnum(int n, int curr, int to[]) { if (curr == n) { GetExpression(to, n); } else { for (int i = 0; i < 3; ++i) { to[curr] = i; DoEnum(n, curr+1, to); } } } int main() { int to[8]; DoEnum(8, 0, to); return 0; }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-04 16:36:1818楼 得分:0
    看的头一点疼,呵呵,,能不能加的注释。。还有你的CAL是干啥的。,
    要分你说,呵呵,,要不载开帖
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-04 16:38:5719楼 得分:0
    分就算了
    CAL能够计算由正整数,加号,减号构成的表达式的计算
    如果要乘除就复杂一些了...
    请参考编译原理
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-04 16:42:4620楼 得分:0
    引用 19 楼 baihacker 的回复:
    分就算了
    CAL能够计算由正整数,加号,减号构成的表达式的计算
    如果要乘除就复杂一些了...
    请参考编译原理


    没学过编译原理(),呵呵,好吧,,待我研究一下。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-04 16:44:0621楼 得分:0
    路过学习
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-04 17:04:2822楼 得分:0
    mark
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-04 17:11:1123楼 得分:0
    C/C++ code
    sprintf(buff, "1%c2%c3%c4%c5%c6%c7%c8%c9", token[a[0]], token[a[1]], token[a[2]], token[a[3]], token[a[4]], token[a[5]],token[a[6]], token[a[7]]);

    要是空格的话,连起来是一个数吧

    token[a[0]], 这个里面的a[]到底是什么
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-04 17:19:1824楼 得分:0
    短时间就能解决,佩服!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-04 17:20:5025楼 得分:0
    有算法就好了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-04 17:26:0726楼 得分:0
    飞雪是变态 鉴定完毕
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ciitc
    • 等级:
    发表于:2008-05-04 17:38:3727楼 得分:0
    该回复于2008-05-05 14:27:59被管理员删除
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天