| 网站首页 | 业界新闻 | 群组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
共有 1397 人关注过本帖, 1 人收藏
标题:请教一道算法题
只看楼主 加入收藏
浅吟辄唱
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2018-3-9
  得分:0 
回复 10楼 李晨经纪人
好,谢谢。
2018-03-10 21:14
李晨经纪人
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:6
帖 子:175
专家分:848
注 册:2018-2-14
  得分:0 
回复 11楼 浅吟辄唱
不好意思我这代码有bug,大家帮我改下吧。我也是新手,大家多多指教
程序代码:
#include<stdio.h>
float cards[7];
int playcards(float n,int o);
int main(void)
{
    int i;
    for(i=0;i<7;++i)
        scanf("%f",&cards[i]);
    playcards(13,7);
    return 0;
}
int playcards(float n,int o)
{
    if(o>1)
    {
        if(playcards(n-cards[o-1],o-1))
        {
            printf(" + %.f",cards[o-1]);        
            return 1;
        }
        if(playcards(n+cards[o-1],o-1))
        {
            printf(" - %.f",cards[o-1]);
            return 1;
        }
        if(playcards(n*cards[o-1],o-1))
        {
            printf(" / %.f",cards[o-1]);        
            return 1;
        }
        if(playcards(n/cards[o-1],o-1))
        {
            printf(" * %.f",cards[o-1]);
            return 1;
        }
        else
        {
            return 0;
            playcards(n,--o);
        }        
    }
    if(o==1&&n==cards[0])
    {
        printf("%.f",cards[0]);
        return 1;
    }
    else
        return 0;
}

2018-03-10 22:15
浅吟辄唱
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2018-3-9
  得分:0 
回复 12楼 李晨经纪人
十分感谢,能留个联系方式吗
2018-03-10 22:42
李晨经纪人
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:6
帖 子:175
专家分:848
注 册:2018-2-14
  得分:0 
回复 13楼 浅吟辄唱
想了个蠢办法把bug弄好了
程序代码:
#include<stdio.h>
float cards[7];
int playcards(float n,int o);
int main(void)
{
    int i,n;
    for(i=0;i<7;++i)
        scanf("%f",&cards[i]);
    for(i=7;i>0;)
    {
        n=playcards(13,i);
        if(n)
            break;
        else
            i--;
    }        
    return 0;
}
int playcards(float n,int o)
{
    if(o>1)
    {
        if(playcards(n-cards[o-1],o-1))
        {
            printf(" + %.f",cards[o-1]);        
            return 1;
        }
        if(playcards(n+cards[o-1],o-1))
        {
            printf(" - %.f",cards[o-1]);
            return 1;
        }
        if(playcards(n*cards[o-1],o-1))
        {
            printf(" / %.f",cards[o-1]);        
            return 1;
        }
        if(playcards(n/cards[o-1],o-1))
        {
            printf(" * %.f",cards[o-1]);
            return 1;
        }
        else
            return 0;   
    }
    if(o==1&&n==cards[0])
    {
        printf("%.f",cards[0]);
        return 1;
    }
    else
        return 0;
}
2018-03-11 08:54
浅吟辄唱
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2018-3-9
  得分:0 
回复 14楼 李晨经纪人
十分感谢
2018-03-11 11:35
LiGoudan
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:20
专家分:148
注 册:2018-2-28
  得分:0 
学习,代码变量换了一下!参考李晨经纪人的代码
程序代码:
#include <stdio.h>

/*float cards[7];
int playcards(float n, int o);

int main()
{
    int i, n;
    for (int i = 0; i < 7; i++)
    {
        scanf("%f", &cards[i]);
    }

    for (i = 7; i > 0; i--)
    {
        n = playcards(13, i);
        if (n == 1)
        {
            break;
        }
    }
    return 0;
}

int playcars(float n, int o)
{
    if (o > 1)
    {
        if (playcards(n - cards[o-1], o-1))
        {
            printf(" + %.f", cards[o-1]);
            return 1;
        }
        if (playcards(n + cards[o-1], o - 1))
        {
            printf(" - %.f", cards[o-1]);
            return 1;
        }
        if (playcards(n * cards[o-1], o - 1))
        {
            printf(" / %.f", cards[o-1]);
            return 1;
        }
        if (playcards(n / cards[o-1], o - 1))
        {
            printf(" * %.f", cards[o-1]);
            return 1;
        }
        else
        {
            return 0;
        }
    }

    if (o == 1 && n == cards[0])
    {
        printf("%.f", cards[0]);
        return 1;
    }
    else
    {
        return 0;
    }
}

*/

#define NUM 7

float cards[NUM];
bool calculateCardSum(float result, int count);

int main(int argc, char argv[])
{
    int i = 0;
    for (int i = 0; i < NUM; i++)
    {
        scanf("%f", &cards[i]);
    }

    for (int i = 7; i > 0; i--)
    {
        if (calculateCardSum(13, i))
        {
            printf("\n");
            break;
        }        
    }
    return 0;
}

bool calculateCardSum(float result, int count)
{
    if (count > 1)
    {
        if (calculateCardSum(result - cards[count-1], count - 1))
        {
            printf(" + %.f", cards[count-1]);
            return true;
        }
        if (calculateCardSum(result + cards[count-1], count - 1))
        {
            printf(" - %.f", cards[count-1]);
            return true;
        }
        if (calculateCardSum(result * cards[count-1], count - 1))
        {
            printf(" / %.f", cards[count-1]);
            return true;
        }
        if (calculateCardSum(result / cards[count-1], count - 1))
        {
            printf(" * %.f", cards[count-1]);
            return true;
        }
    }
    else
    {
        if (result == cards[0])
        {
            printf("%.f", cards[0]);
            return true;
        }
    }

    return false;
}


[此贴子已经被作者于2018-3-11 22:47编辑过]

2018-03-11 22:41
李晨经纪人
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:6
帖 子:175
专家分:848
注 册:2018-2-14
  得分:0 
回复 16楼 LiGoudan
像我用vs2010的 bool用不了,所以也不懂
2018-03-11 23:14
LiGoudan
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:20
专家分:148
注 册:2018-2-28
  得分:0 
回复 17楼 李晨经纪人
其实我写的不规范,我的文件后缀是.cpp,C++里面有bool,其实和你的一样!
你很厉害!!
2018-03-11 23:20
九转星河
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:长长久久
等 级:版主
威 望:50
帖 子:4975
专家分:13940
注 册:2016-10-22
  得分:0 
过来吃个瓜先~

程序代码:

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
 
void Input( unsigned [],size_t );
void Print( const unsigned [],size_t,size_t );
void Fun(const unsigned [],size_t);

int main ( void )
{
    unsigned s[7];
    const size_t size=sizeof (s)/sizeof (*s);
   
    Input(s,size);
    Fun(s,size);
   
    return 0;
}

void Input( unsigned arr[],size_t size )
{
    size_t i;
   
    for (i=0;i!=size;++i)
        if (scanf("%u",&arr[i])!=1)
            exit(EXIT_FAILURE);
            
    while (getchar()!='\n');
}

void Print( const unsigned arr[],size_t n,size_t size)
{
    #define __GET_DATA(s,n)    \
        (((s)>>(n))&3)
        
    const char s[]={"+-*/"};
    size_t i;
    printf("%u",arr[0]);
   
    for (i=0;i!=size;++i)
    {
        const size_t k=__GET_DATA(n,i);
        printf("%c%u",s[k],arr[i+1]);
    }
    puts("");
   
    #undef __GET_DATA(s,n)
}

void Fun(const unsigned arr[],size_t size)
{
    #define N 13.
    #define __GET_DATA(s,n)    \
        (((s)>>(n))&3)
   
    const _size=size-1;
    unsigned save_size=0;
    unsigned save_single;
   
    size_t i;
   
    if (size==0)
        return ;
   
    for (i=0;i!=1<<(_size*2);++i)
    {
        double n=arr[0];
        size_t j;
        
        for (j=0;j!=_size;++j)
        {
            const size_t k=__GET_DATA(i,j);
            if (k==0)
                n+=arr[j+1];
            else if (k==1)
                n-=arr[j+1];
            else if (k==2)
                n*=arr[j+1];
            else if (fabs(n)>1e-6)
                n/=arr[j+1];
            else
                break;
               
            if (n==N&&(j+1>save_size))
            {
                save_size=j+1;
                save_single=n;
            }
        }
            
    }
   
    if (save_size)
        Print(arr,save_single,save_size);
    else
        puts("Na");
   
   
    #undef  N
    #undef  __GET_DATA
}




[此贴子已经被作者于2018-3-12 22:01编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2018-03-12 19:07
浅吟辄唱
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2018-3-9
  得分:0 
回复 19楼 九转星河
2018-03-13 22:51







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

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