期中考的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