| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 535 人关注过本帖
标题:程序运行失败,求找错误。
只看楼主 加入收藏
x_x
Rank: 2
等 级:论坛游民
帖 子:44
专家分:43
注 册:2012-10-16
结帖率:100%
收藏
已结贴  问题点数:34 回复次数:6 
程序运行失败,求找错误。
题目是,
有一群海盗(不多于20人),在船上比拼酒量。过程如下:打开一瓶酒,所有在场的人平分喝下,有几个人倒下了。再打开一瓶酒平分,又有倒下的,再次重复…… 直到开了第4瓶酒,坐着的已经所剩无几,海盗船长也在其中。当第4瓶酒平分喝下后,大家都倒下了。
等船长醒来,发现海盗船搁浅了。他在航海日志中写到:“……昨天,我正好喝了一瓶…….奉劝大家,开船不喝酒,喝酒别开船……”
请你根据这些信息,推断开始有多少人,每一轮喝下来还剩多少人。
如果有多个可能的答案,请列出所有答案,每个答案占一行。
格式是:人数,人数,…
程序代码:
#include <stdio.h>
int zhanzhuan(int a,int b);
int zxgbs(int a,int b,int c,int d);
void main()
{
    int a,b,c,d,e=0,temp1,temp2;
    for(a=20;a>2;a--)
    {
        for(b=1;b<a;b++)
        {
            for(c=1;c<a;c++)
            {
                for(d=1;d<a;d++)
                {
                    temp1=zxgbs(a,b,c,d);
                    temp2=temp1/a+temp1/(a-b)+temp1/(a-b-c)+temp1/(a-b-c-d);
                    if(temp1!=temp2)continue;
                    else printf("%d,%d,%d,%d,%d\n",a,b,c,d,e);
                }
            }
        }
    }
}
int zxgbs(int a,int b,int c,int d)
{
    int t1,t2,t3;
    t1=a*b/zhanzhuan(a,b);
    t2=t1*c/zhanzhuan(t1,c);
    t3=t2*d/zhanzhuan(t2,d);
    return t3;
}
int zhanzhuan(int a,int b)
{
    int t;
    if(a<b)
    {
        t=b;
        b=a;
        a=t;
    }
    while(t=a%b)
    {
        a=b;
        b=t;
    }
    return b;
}

我的代码,为啥总运行失败,
搜索更多相关主题的帖子: 海盗船 信息 一瓶 
2013-03-14 21:57
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:11 
void Check(int nCount)
{
    // x1,x2,x3,x4 >=1
    // x1 + x2 + x3 + x4 = nCount;
    // 1/(x1 + x2 + x3 + x4) + 1/(x2 + x3 + x4) + 1/(x3 + x4) + 1/x4 = 1;
    // =>
    // (x2 + x3 + x4) * (x3 + x4) * x4 +
    // (x1 + x2 + x3 + x4) * (x3 + x4) * x4  +
    // (x1 + x2 + x3 + x4) * (x2 + x3 + x4) * x4 +
    // (x1 + x2 + x3 + x4) * (x2 + x3 + x4) * (x3 + x4)

    // = (x1 + x2 + x3 + x4) * (x2 + x3 + x4) * (x3 + x4) * x4

    // 也就是
    // (nCount - x1) * (x3 + x4) * x4 +
    // (nCount) * (x3 + x4) * x4  +
    // (nCount) * (nCount-x1) * x4 +
    // (nCount) * (nCount-x1) * (x3 + x4)
    // = (nCount) * (nCount -x1) * (x3 + x4) * x4


    for (int x1 = 1; x1 <nCount; x1++)
    {
        for (int x2 = 1; x2 <nCount; x2++)
        {
            for (int x3 = 1; x3 <nCount; x3++)
            {
                for (int x4 = 1; x4 <nCount; x4++)
                {
                    if (x1 + x2 + x3 +x4 != nCount) continue;

                    if (((nCount - x1) * (x3 + x4) * x4 +
                         (nCount) * (x3 + x4) * x4  +
                         (nCount) * (nCount-x1) * x4 +
                         (nCount) * (nCount-x1) * (x3 + x4)) !=
                        
                         (nCount) * (nCount -x1) * (x3 + x4) * x4) continue;

                    printf("count=%d,x1=%d,x2=%d,x3=%d,x4=%d.\n", nCount,x1,x2,x3,x4);

                }
            }
        }
    }
}

int main(void)
{

    for (int i = 4; i <= 20; i++)
    {
        Check(i);
    }
}

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-03-14 22:50
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:0 
结果

C:\Users\yuccn>C:\code\test\vecter\Debug\vecter.exe
count=12,x1=6,x2=2,x3=2,x4=2.
count=15,x1=5,x2=7,x3=1,x4=2.
count=18,x1=9,x2=6,x3=1,x4=2.
count=20,x1=15,x2=1,x3=2,x4=2.

C:\Users\yuccn>

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-03-14 22:52
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:0 
x1 x2 x3 x4 为每次倒下的人

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-03-14 22:53
梅可伟梅可伟
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:69
专家分:180
注 册:2013-3-11
收藏
得分:11 
/*程序运行失败,求找错误。
 题目是,
 有一群海盗(不多于20人),在船上比拼酒量。过程如下:打开一瓶酒,所有在场的人平分喝下,有几个人倒下了。再打开一瓶酒平分,又有倒下的,再次重复…… 直到开了第4瓶酒,坐着的已经所剩无几,海盗船长也在其中。当第4瓶酒平分喝下后,大家都倒下了。
 等船长醒来,发现海盗船搁浅了。他在航海日志中写到:“……昨天,我正好喝了一瓶…….奉劝大家,开船不喝酒,喝酒别开船……”
 请你根据这些信息,推断开始有多少人,每一轮喝下来还剩多少人。
 如果有多个可能的答案,请列出所有答案,每个答案占一行。
 格式是:人数,人数,…
 
程序代码:*/

#include <stdio.h>
 int zhanzhuan(int a,int b);
 int zxgbs(int a,int b,int c,int d);
 void main()
 {
     int a,b,c,d,e=0,temp1,temp2;
     for(a=20;a>2;a--)
     {
         for(b=1;b<a;b++)
         {
             for(c=1;c<b;c++)
             {
                 for(d=1;d<c;d++)//注意控制条件, a,b,c,d分别为第—.2.3.4次喝洒的人数,因为第次都有人倒下,a>b>c>d;
                 {
                     temp1=zxgbs(a,b,c,d);
                     temp2=temp1/a+temp1/(b)+temp1/(c)+temp1/(d);//这里每次喝酒的人数为a,b,c,d,你把喝酒的人数和倒下的人数搞混淆了;;
                     if(temp1!=temp2)continue;
                     else
                     {
                         e++;
                         printf("%d,%d,%d,%d,%5d\n",a,b,c,d,e);
                     }
                 }
             }
         }
     }
 }
 int zxgbs(int a,int b,int c,int d)
 {
     int t1,t2,t3;
     t1=a*b/zhanzhuan(a,b);
     t2=t1*c/zhanzhuan(t1,c);
     t3=t2*d/zhanzhuan(t2,d);
     return t3;
 }
 int zhanzhuan(int a,int b)
 {
     int t;
     if(a<b)
     {
         t=b;
         b=a;
         a=t;
     }
     while(t=a%b)
     {
         a=b;
         b=t;
     }
     return b;
 }
2013-03-15 08:14
tompobing
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:260
专家分:809
注 册:2012-12-9
收藏
得分:11 

#include<stdio.h>
 main()
 {
     double j,k,m,t,sum=20;
     for(j=1;j<=20;j++)
         for(k=1;k<=20-j;k++)
             for(m=1;m<=20-j-k;m++)
                 for(t=1;t<=20-j-k-m;t++)
                     if(1==1/(j+k+m+t)+1/(k+m+t)+1/(m+t)+1/(t))
                     {   
                        printf("%2f %2f %2f %2f %f",j+k+m+t,k+m+t,m+t,t,0);
                         printf("\n");
                     }
 }
2013-03-15 20:31
x_x
Rank: 2
等 级:论坛游民
帖 子:44
专家分:43
注 册:2012-10-16
收藏
得分:0 
谢谢各位了,给我很多启发,
2013-03-16 12:43
快速回复:程序运行失败,求找错误。
数据加载中...
 
   



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

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