免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: yy_galois
打印 上一主题 下一主题

[C] 学习编程的几点看法 [复制链接]

论坛徽章:
0
61 [报告]
发表于 2008-06-27 13:20 |只看该作者
有意思

论坛徽章:
0
62 [报告]
发表于 2008-06-27 13:55 |只看该作者
顶这个!
原帖由 zszyj 于 2008-6-25 23:09 发表

提交计算机处理之前,先要设计算法模型,设计模型的方式,就是要找出问题的内部规律. 将自然语言转换成数学模式, 这就是模型.
计算机只能根据你定制的模型,穷举所有的算法路径,找出符合条件的答案,并 ...

论坛徽章:
0
63 [报告]
发表于 2008-06-27 17:12 |只看该作者

说谎的是乙!

说谎的是乙!
这好像是离散数学问题

论坛徽章:
0
64 [报告]
发表于 2008-06-27 21:46 |只看该作者
真的应该学电有用的东西   我们大学课开了一堆   C我现在还没弄明白呢  可能是不上心吧   多看书能学好c吗

论坛徽章:
0
65 [报告]
发表于 2008-06-27 22:32 |只看该作者
#define        HOW_MANY        4

struct rob_say {
        int        who;    // 哪位?
        bool        isrob;  // 是不是强盗?
} robbuf[HOW_MANY] = {
        {0, false}, {3, true}, {1, true}, {3, false}
};  // 0代表甲,1代表乙...

int main(void)
{
        int        i, j, k;
        bool        buf[HOW_MANY];  // 根据假设判定4个人中那些是强盗
        int        robs, rob;

        for (i = 0; i < HOW_MANY; i++) {
                for (j = 0; j < HOW_MANY; j++) {
                        buf[j] = false;
                }
               
                for (k = 0; k < HOW_MANY; k++) {
                        if (k == i) {  // 假设i说的话是正确的
                                buf[robbuf[k].who] = robbuf[k].isrob;
                                continue;
                        }
                        // 其他人的话都是假的
                        buf[robbuf[k].who] = !robbuf[k].isrob;                       
                }
               
                robs = 0;
                for (j = 0; j < HOW_MANY; j++) {
                        if (buf[j] == true) {
                                robs++;  // 判定出有几个人是强盗
                                rob = j; // j是强盗
                        }
                }
               
                if (robs == 1) {   // 如果只有一个是强盗,说明i说的是真话, 强盗就是rob(即:j)
                        printf("robber is %dth!\n", rob + 1);
                        break;
                }
        }
       
        if (i == HOW_MANY) {
                printf("unkown who is the robber!\n");
        }

        return        0;
}

[ 本帖最后由 UCfree 于 2008-6-27 22:35 编辑 ]

论坛徽章:
0
66 [报告]
发表于 2008-06-27 23:02 |只看该作者
支持

论坛徽章:
0
67 [报告]
发表于 2008-06-28 08:47 |只看该作者

支持,支持

原帖由 cugb_cat 于 2008-6-24 21:13 发表
按照计算机的处理步骤,应该是这样,假设甲说的是真话,看乙丙丁之间的话是否与都是假话有冲突;如果有冲突,则假设乙的话是真话,看甲丙丁之间的话是否与都是假话矛盾;。。。依此类推。。。
  

一针见血。。。。。。

[ 本帖最后由 stormcc 于 2008-6-28 08:51 编辑 ]

论坛徽章:
0
68 [报告]
发表于 2008-06-28 08:55 |只看该作者
x, 1: 是强盗,0:不是强盗
y, 1: 实话,0:谎话
--------------
var x{i in 1..4},binary;
var y{i in 1..4},binary;
s.t. stat_jia: y[1]+x[1] = 1;
s.t. stat_yi: y[2]=x[4];
s.t. stat_bing: y[3]=x[2];
s.t. stat_ding: y[4]+x[4] = 1;
s.t. ss: sum{i in 1..4} y[ i ] =1;
solve;

for {i in 1..4}
{
                printf " %d ",x[ i ];
}
-------------
所有的此类甚至更复杂的逻辑,布尔问题都可以转化为带整数的线性规划问题。保存上述文件至input,运行
glpsol -m input
结果
1  0  0  1
甲,丁是强盗

[ 本帖最后由 kekegg 于 2008-6-28 08:57 编辑 ]

论坛徽章:
0
69 [报告]
发表于 2008-06-28 11:41 |只看该作者
原帖由 kekegg 于 2008-6-28 08:55 发表
x, 1: 是强盗,0:不是强盗
y, 1: 实话,0:谎话
--------------
var x{i in 1..4},binary;
var y{i in 1..4},binary;
s.t. stat_jia: y[1]+x[1] = 1;
s.t. stat_yi: y[2]=x[4];
s.t. stat_ ...


请教这是什么语言? matlab?
这个solve的实现, 又是怎么个过程呢? 能否介绍一下?
再说了, 答案是错的啊, 原题是只有一个强盗, 怎么就变出了两个了?

论坛徽章:
0
70 [报告]
发表于 2008-06-28 11:43 |只看该作者
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP