期中考的C++题目

Home Home
引用 | 编辑 Chistduw
2005-10-24 23:38
楼主
推文 x0
老师要我们写一个C++的程式,题目在下面,但是我不知道要怎么撰写,只知道有非常多if和else的条件判断式,期中考就要交了!

Q:给你12颗鸡蛋,其中有一颗鸡 ..

访客只能看到部份内容,免费 加入会员



献花 x0
引用 | 编辑 ellington
2005-10-25 00:05
1楼
  
第一次是一边6个
第二次取重的那6个,一边 3个
第三次剩下的3个取两个,如果一样重就是剩下的那个

献花 x0
引用 | 编辑 唐老鸭
2005-10-25 00:22
2楼
  
这种题目叫做"决策树"....
你可以去参考跟树有关的资料结构应该会讲到...
1楼说的其实就是你要的写法....
不然上网找应该也一堆...

献花 x0
引用 | 编辑 sky062012
2005-10-25 00:42
3楼
  
// 132.cpp : 定义主控台应用程式的进入点。
//

#include "stdafx.h"
#include<iostream>
using namespace std;
void main(int argc, _TCHAR* argv[])
{
    int x1=0;
    int x2=0;
    int x3=0;
    int x4=0;
    int x5=0;
    int x6=0;
    int x7=0;
    int x8=0;
    int x9=0;
    int x10=0;
    int x11=0;
    int x12=0;
    int y;
    cout<<"请输入一个数字,这个数字将会是你的谜底唷\n";
    cin>>y;
    y=y-1;
    y=y%12+1;
    cout<<y<<"\n"<<"上面那个数字是谜底唷\n";
    if(y==1)
    {
        x1=x1+1;
    }
    else if(y==2)
    {
        x2=x2+1;
    }
    else if(y==3)
    {
        x3=x3+1;
    }
    else if(y==4)
    {
        x4=x4+1;
    }
    else if(y==5)
    {
        x5=x5+1;
    }
    else if(y==6)
    {
        x6=x6+1;
    }
    else if(y==7)
    {
        x7=x7+1;
    }
    else if(y==8)
    {
        x8=x8+1;
    }
    else if(y==9)
    {
        x9=x9+1;
    }
    else if(y==10)
    {
        x10=x10+1;
    }
    else if(y==11)
    {
        x11=x11+1;
    }
    else if(y==12)
    {
        x12=x12+1;
    }
    //以上是白痴的程式,可以不用学。
    cout<<"现在电脑要开始找数字了唷\n";
    int a,b,c;
    a=x1+x2+x3+x4;
    b=x5+x6+x7+x8;
    c=x9+x10+x11+x12;
    if(a==b)
    {
        cout<<"现在做第一次判别唷,\n"<<"比较1,2,3,4跟5,6,7,8哪边重\n";
        cout<<"比较结果:1,2,3,4跟5,6,7,8一样大,问题数字在9,10,11,12\n";
        if(x9+x10>=x11+x12)
        {
              cout<<"做出第二次判别,\n"<<"比较9,10跟11,12哪边重\n";
              cout<<"比较结果:9,10比较重\n"<<"问题数字在9,10\n";
              if(x9>=x10)
              {
                  cout<<"做出第三次判别,\n"<<"比较9,10哪边重\n";
                  cout<<"比较结果:9比较重。\n"<<"问题数字是:9。";
              }
              else
              {
                  cout<<"做出第三次判别,\n"<<"比较9,10哪边重\n";
                  cout<<"比较结果:10比较重。\n"<<"问题数字是:10。";
              }
        }
        else
        {
              cout<<"做出第二次判别,\n"<<"比较9,10跟11,12哪边重\n";
              cout<<"比较结果:11,12比较重\n"<<"问题数字在11,12\n";
              if(x11>=x12)
              {
                  cout<<"做出第三次判别,\n"<<"比较11,12哪边重\n";
                  cout<<"比较结果:11比较重。\n"<<"问题数字是:11。";
              }
              else
              {
                  cout<<"做出第三次判别,\n"<<"比较11,12哪边重\n";
                  cout<<"比较结果:12比较重。\n"<<"问题数字是:12。";
              }
        }
    }

        else if(a>=b)
    {
        cout<<"现在做第一次判别唷,\n"<<"比较1,2,3,4跟5,6,7,8哪边重\n";
        cout<<"比较结果:1,2,3,4比5,6,7,8重,问题数字在1,2,3,4\n";
        if(x1+x2>=x3+x4)
        {
              cout<<"做出第二次判别,\n"<<"比较1,2跟3,4哪边重\n";
              cout<<"比较结果:1,2比较重\n"<<"问题数字在1,2\n";
              if(x1>=x2)
              {
                  cout<<"做出第三次判别,\n"<<"比较1,2哪边重\n";
                  cout<<"比较结果:1比较重。\n"<<"问题数字是:1。";
              }
              else
              {
                  cout<<"做出第三次判别,\n"<<"比较1,2哪边重\n";
                  cout<<"比较结果:2比较重。\n"<<"问题数字是:2。";
              }
        }
        else
        {
              cout<<"做出第二次判别,\n"<<"比较1,2跟3,4哪边重\n";
              cout<<"比较结果:3,4比较重\n"<<"问题数字在3,4\n";
              if(x3>=x4)
              {
                  cout<<"做出第三次判别,\n"<<"比较3,4哪边重\n";
                  cout<<"比较结果:3比较重。\n"<<"问题数字是:3。";
              }
              else
              {
                  cout<<"做出第三次判别,\n"<<"比较3,4哪边重\n";
                  cout<<"比较结果:4比较重。\n"<<"问题数字是:4。";
              }
        }
    }

        else if(a<=b)
    {
        cout<<"现在做第一次判别唷,\n"<<"比较1,2,3,4跟5,6,7,8哪边重\n";
        cout<<"比较结果:1,2,3,4比5,6,7,8轻,问题数字在5,6,7,8\n";
        if(x5+x6>=x7+x8)
        {
              cout<<"做出第二次判别,\n"<<"比较5,6跟7,8哪边重\n";
              cout<<"比较结果:5,6比较重\n"<<"问题数字在5,6\n";
              if(x5>=x6)
              {
                  cout<<"做出第三次判别,\n"<<"比较5,6哪边重\n";
                  cout<<"比较结果:5比较重。\n"<<"问题数字是:5。";
              }
              else
              {
                  cout<<"做出第三次判别,\n"<<"比较5,6哪边重\n";
                  cout<<"比较结果:6比较重。\n"<<"问题数字是:6。";
              }
        }
        else
        {
              cout<<"做出第二次判别,\n"<<"比较5,6跟7,8哪边重\n";
              cout<<"比较结果:7,8比较重\n"<<"问题数字在7,8\n";
              if(x7>=x8)
              {
                  cout<<"做出第三次判别,\n"<<"比较7,8哪边重\n";
                  cout<<"比较结果:7比较重。\n"<<"问题数字是:7。";
              }
              else
              {
                  cout<<"做出第三次判别,\n"<<"比较7,8哪边重\n";
                  cout<<"比较结果:8比较重。\n"<<"问题数字是:8。";
              }
        }
    }
    cout<<"这个烦人的程式终于结束了,真是可喜可贺。\n";
}

=============================================================

上面那个没用阵列写出来的白痴程式,下面用阵列写出来的白痴程式

=============================================================

// 132.cpp : 定义主控台应用程式的进入点。
//

#include "stdafx.h"
#include<iostream>
using namespace std;
void main(int argc, _TCHAR* argv[])
{
   
   
    int y ;
   
    int a[13]={0,0,0,0,0,0,0,0,0,0,0,0,0};
   
    cout<<"请输入一个数字,这个数字将会是你的谜底唷\n";
    cin>>y;
    y=y-1;
    y=y%12+1;
    cout<<y<<"\n"<<"上面那个数字是谜底唷\n";
    a[y]=1;
    cout<<"现在电脑要开始找数字了唷\n";

    if(a[1]+a[2]+a[3]+a[4]+a[5]+a[6]>=a[7]+a[8]+a[9]+a[10]+a[11]+a[12])
    {
        cout<<"第一次比较\n";
        cout<<"1~6比7~12重\n";
        if(a[1]+a[2]+a[3]>=a[4]+a[5]+a[6])
        {
              cout<<"第二次比较\n";
              cout<<"1~3比4~6重\n";
              if(a[1]==a[2])
              {
                  cout<<"第三次比较\n";
                  cout<<"1=2\n";
                  cout<<"3为问题数字\n";
              }
              else if(a[1]>=a[2])
              {
                  cout<<"第三次比较\n";
                  cout<<"1>2\n";
                  cout<<"1为问题数字\n";
              }
              else if(a[1]<=a[2])
              {
                  cout<<"第三次比较\n";
                  cout<<"1<2\n";
                  cout<<"2为问题数字\n";
              }
             
        }
        else if(a[1]+a[2]+a[3]<=a[4]+a[5]+a[6])
        {
              cout<<"第二次比较\n";
              cout<<"1~3比4~6轻\n";
              if(a[4]==a[5])
              {
                  cout<<"第三次比较\n";
                  cout<<"4=5\n";
                  cout<<"6为问题数字\n";
              }
              else if(a[4]>=a[5])
              {
                  cout<<"第三次比较\n";
                  cout<<"4>5\n";
                  cout<<"4为问题数字\n";
              }
              else if(a[4]<=a[5])
              {
                  cout<<"第三次比较\n";
                  cout<<"4<5\n";
                  cout<<"5为问题数字\n";
              }
        }
    }
    else if(a[1]+a[2]+a[3]+a[4]+a[5]+a[6]<=a[7]+a[8]+a[9]+a[10]+a[11]+a[12])
    {
        cout<<"第一次比较\n";
        cout<<"1~6比7~12轻\n";
        if(a[7]+a[8]+a[9]>=a[10]+a[11]+a[12])
        {
              cout<<"第二次比较\n";
              cout<<"7~9比8~12重\n";
              if(a[7]==a[8])
              {
                  cout<<"第三次比较\n";
                  cout<<"7=8\n";
                  cout<<"9为问题数字\n";
              }
              else if(a[7]>=a[8])
              {
                  cout<<"第三次比较\n";
                  cout<<"7>8\n";
                  cout<<"7为问题数字\n";
              }
              else if(a[7]<=a[8])
              {
                  cout<<"第三次比较\n";
                  cout<<"7<8\n";
                  cout<<"8为问题数字\n";
              }
        }
        else if(a[7]+a[8]+a[9]<=a[10]+a[11]+a[12])
        {
              cout<<"第二次比较\n";
              cout<<"7~9比10~12轻\n";
              if(a[10]==a[11])
              {
                  cout<<"第三次比较\n";
                  cout<<"10=11\n";
                  cout<<"12为问题数字\n";
              }
              else if(a[10]>=a[11])
              {
                  cout<<"第三次比较\n";
                  cout<<"10>11\n";
                  cout<<"10为问题数字\n";
              }
              else if(a[10]<=a[11])
              {
                  cout<<"第三次比较\n";
                  cout<<"10<11\n";
                  cout<<"11为问题数字\n";
              }
             
        }
    }
}

献花 x0
引用 | 编辑 Chistduw
2005-11-07 23:28
4楼
  
下面是引用sky062012于2005-10-25 00:42发表的 :
// 132.cpp : 定义主控台应用程式的进入点。
//

#include "stdafx.h"
#include<iostream>
.......
不好意思,楼上您所贴出来的程式,并不符合老师的需求,所以算是失败的程式。
老师要求的是坏掉的鸡蛋,是随机产生一颗,不是由我们来决定,然后电脑判断是左边重?一样重?右边重?
再由我们来假设是左边重的话,电脑则判断第二次,左边的重量,以此类推。
一样最多只能测试三次,第四次则是电脑公布答案。

献花 x0
引用 | 编辑 codeboy
2005-11-08 00:07
5楼
  
下面是引用Chistduw于2005-11-7 23:28发表的 :

不好意思,楼上您所贴出来的程式,并不符合老师的需求,所以算是失败的程式。
老师要求的是坏掉的鸡蛋,是随机产生一颗,不是由我们来决定,然后电脑判断是左边重?一样重?右边重?
再由我们来假设是左边重的话,电脑则判断第二次,左边的重量,以此类推。
一样最多只能测试三次,第四次则是电脑公布答案。

sky062012 的程式已经有了大部分的轮廓~要随机的话只要把上面人工输入的部份改成取乱数即可
要四次公布答案也只是加上回圈而已~

再多自己动手试试~ 表情

献花 x0
引用 | 编辑 唐老鸭
2005-11-08 01:00
6楼
  
下面是引用Chistduw于2005-11-7 23:28发表的 :

不好意思,楼上您所贴出来的程式,并不符合老师的需求,所以算是失败的程式。
老师要求的是坏掉的鸡蛋,是随机产生一颗,不是由我们来决定,然后电脑判断是左边重?一样重?右边重?
再由我们来假设是左边重的话,电脑则判断第二次,左边的重量,以此类推。
一样最多只能测试三次,第四次则是电脑公布答案。

上面的程式我会建议你把它改写成递回的模式....
会更有弹性....

献花 x0
引用 | 编辑 rakish
2006-01-28 21:14
7楼
  
这种问题要用三元树来解

以 12 为例
123456789abc

假设 8比较重
第一次
1234 vs 9abc 一样重表示:5678 <--有一坏且1234与9abc皆正确
第二次
56 vs 12 一样重表示 坏的是 78
第三次
7 vs 1 一样重表示 8为坏

以9比较轻为例
第一次
1234 vs 9abc 左边重表示:5678 正确 1234或9abc有一坏
第二次
1234 vs 5678 一样重表示 坏的是 9abc
第三次
12 vs 9a 左边重 表示 9a有一坏且较轻
第四次
1 vs 9 左边重 表示 9坏且较轻

献花 x0