| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 427 人关注过本帖
标题:好程序值得继续讨论学习。
取消只看楼主 加入收藏
qunxingw
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:24
帖 子:1676
专家分:7295
注 册:2011-6-30
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:2 
好程序值得继续讨论学习。
一个排序问题求解
全班同学排成 6 排, A 、 B 、 C 、 D 、 E 、 F 等 6 人分别站在第 1 排到第 6 排 • 用 6 个 int 变量表示 A — F 的位置 –

A 不在第 1 排 à a != 1

A 与 B 前后相邻  (a == b + 1) || (a == b - 1)

C 在 D 前面 c == d - 1

E 在 B 的前两排  e == b - 2  

C 在 F 后的第 4 排  c == f + 4

怎么让输出结果是f e a b c d 啊

   

 前天 22:59   
举报帖子
使用道具
我来评分
 beyondyf

等 级:版主
威 望:30
帖 子:1907
专家分:6828
注 册:2008-1-21
第 2 楼   得分:10      很晚了,就不解释代码了,自己揣摩一下。


程序代码:
#include <stdio.h>

#define ROW_LEN        6

int judge(int * r)
{
    if(r[0] != 1)
    if(r[0] == r[1] + 1 || r[0] == r[1] - 1)
    if(r[2] == r[3] - 1)
    if(r[4] == r[1] - 2)
    if(r[2] == r[5] + 4)
        return 1;
    return 0;
}

void print_row(int * r)
{
    int i;
    char p[ROW_LEN + 1];
    for(p[ROW_LEN] = '\0', i = 0; i < ROW_LEN; i++) p[r[i] - 1] = i + 'a';
    puts(p);
}

void search(int * r, int deep)
{
    int i, j, t;
    if(deep == ROW_LEN && judge(r))
    {
        print_row(r);
        return;
    }
    for(i = deep; i < ROW_LEN; i++)
    for(j = i; j < ROW_LEN; j++)
    {
        t = r[i]; r[i] = r[j]; r[j] = t;
        search(r, deep + 1);
        t = r[i]; r[i] = r[j]; r[j] = t;
    }
}

int main()
{
    int r[] = {1, 2, 3, 4, 5, 6};
    search(r, 0);
    return 0;
版主的程序很是精妙,应该好好学习。本人大把年纪人业余学习,学生们更应努力。
我研究了好一会,从入门者思维出发,改了一下,希望入门的朋友能有收获。
程序代码:
#include <stdio.h>

#define ROW_LEN        6

int judge(char * p)
{
    if(p[0]!='a')
   if(p[0] == p[1] + 1 || p[0] == p[1] - 1)
    if(p[2] == p[3] - 1)
    if(p[4] == p[1] - 2)
    if(p[2] == p[5] + 4)
        return 1;
    return 0;
}

void print_row(char * p)
{
    int i;
    char r[ROW_LEN+1 ];
    for(p[ROW_LEN] = '\0', i = 0; i < ROW_LEN; i++) p[i];//printf("%c",p[i]);
 puts(p);
}

void search(char * p, int deep)
{
    int i, j, t;
    if(deep == ROW_LEN && judge(p))
    {
        print_row(p);
        return;
    }
    for(i = deep; i < ROW_LEN; i++)
    for(j = i; j < ROW_LEN; j++)
    {
        t = p[i]; p[i] = p[j]; p[j] = t;
        search(p, deep + 1);
        t = p[i]; p[i] = p[j]; p[j] = t;
    }
}

int main()
{
    char r[] = {'a', 'b', 'c','d', 'e', 'f'};
    search(r, 0);
    getchar();
    return 0;
}
搜索更多相关主题的帖子: 道具 
2012-10-10 16:07
qunxingw
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:24
帖 子:1676
专家分:7295
注 册:2011-6-30
收藏
得分:0 
精碎没动,就象某国拿了美的F22样品,没到独立开发的阶段。感觉这样初学者好理解点。本人70年代初

www.qunxingw.wang
2012-10-10 16:47
qunxingw
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:24
帖 子:1676
专家分:7295
注 册:2011-6-30
收藏
得分:0 
呵呵,这到是,受教了。

www.qunxingw.wang
2012-10-10 17:39
快速回复:好程序值得继续讨论学习。
数据加载中...
 
   



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

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