| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1702 人关注过本帖, 3 人收藏
标题:一道编程题~
只看楼主 加入收藏
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
最新更正一下~曾经引用5楼代码的注意一下~原来输出结果有问题,现在已经改正~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-02-09 15:28
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
再把原来的代码略加优化~

程序代码:
#include<stdio.h>
int main()
{
    char *p[]={"洞庭湖","洪泽湖","鄱阳湖","太湖"};
    int a[24][4]=
    {
        {1,2,3,4},{1,2,4,3},{1,3,2,4},{1,3,4,2},{1,4,2,3},{1,4,3,2},
        {2,1,3,4},{2,1,4,3},{2,3,1,4},{2,3,4,1},{2,4,1,3},{2,4,3,1},
        {3,1,2,4},{3,1,4,2},{3,2,1,4},{3,2,4,1},{3,4,1,2},{3,4,2,1},
        {4,1,2,3},{4,1,3,2},{4,2,1,3},{4,2,3,1},{4,3,1,2},{4,3,2,1}
    };

    int i=0;

    for (i=0;i<24;i++)
    {
        int j=0;

        if (((a[i][0]==1)+(a[i][1]==4)+(a[i][2]==3))!=1)
            continue;

        if (((a[i][1]==1)+(a[i][0]==4)+(a[i][2]==2)+(a[i][3]==3))!=1)
            continue;

        if (((a[i][1]==4)+(a[i][0]==3))!=1)
            continue;

        if (((a[i][2]==1)+(a[i][3]==4)+(a[i][1]==2)+(a[i][0]==3))!=1)
            continue;

        for (j=0;j<4;j++)
            printf("%-10s%d\n",p[j],a[i][j]);
    }

    return 0;
}




[此贴子已经被作者于2017-2-9 16:05编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-02-09 16:03
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
收藏
得分:0 
//做了个位运算版的
#include<stdio.h>
#include<math.h>
short lake[4]={16,16,16,16};/*依次为洪泽,洞庭,鄱阳,太湖
取值16表示未参加排序,取值8,4,2,1分别表示第四,三,二,一名*/
int fun(short step)
{
    int tag;short i;
    for(i=0;i<4;i++)
    {
        if(lake[i]<16) continue;
        lake[i]>>=step;
        if(step<4)
            tag=fun(step+1);
        else
        {
            tag=1;
            if(((lake[1]&1)!=0)+((lake[0]&8)!=0)+((lake[2]&4)!=0)!=1)
                tag=0;//A不满足
            if(((lake[0]&1)!=0)+((lake[1]&8)!=0)+((lake[2]&2)!=0)+((lake[3]&4)!=0)!=1)
                tag=0;//B不满足
            if(((lake[0]&8)!=0)+((lake[1]&4)!=0)!=1)
                tag=0;//C不满足
            if(((lake[2]&1)!=0)+((lake[3]&8)!=0)+((lake[0]&2)!=0)+((lake[1]&4)!=0)!=1)
                tag=0;//D不满足
            if(tag)
            {
                printf("洪泽%d,洞庭%d,鄱阳%d,太湖%d\n",(int)(log10(lake[0])/log10(2)+1),
                (int)(log10(lake[1])/log10(2)+1),(int)(log10(lake[2])/log10(2)+1),
                (int)(log10(lake[3])/log10(2)+1));
            }
        }
        lake[i]<<=step;
        if(tag) return 1;else continue;
    }
    return 0;
}
int main()
{
    fun(1);
    return 0;
}
2017-02-10 13:59
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
其实据说那是大四的题目,说真的其实不算难,不过大家提供了这么多种方法和思维方式,学习了,谢谢大家。

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-02-10 21:38
快速回复:一道编程题~
数据加载中...
 
   



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

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