iT邦幫忙

0

老師要我附贈解題思維 請問這題是要附贈甚麼解題思維? (C++,林口高中基礎題W053)

  • 分享至 

  • xImage

題目:
二次世界大戰諾曼第登陸戰況激烈,盟軍雖勝但也犧牲慘重; 戰事結束後,士官長開始清點士兵人數,
透過士兵隨身的兵籍牌號碼,希望知道有多少士兵不幸陣亡,但人數眾多,清點不易,況且
兵籍號碼也出現重覆登記的現象,請你幫忙解決此一難題。

輸入說明
多筆測資,每筆測資兩行,
第一行兩個整數 N、M,N 為參戰的士兵人數,M 為登記號碼數,
第二行有 M 個整數,代表回歸士兵的登記的兵籍號碼。
(1 < N、M <10000)

輸出說明
每筆測資輸出一行,
輸出所有不幸喪生的士兵兵籍號碼 (由小到大)。
如果全部士兵都生還,則輸出 '@'
格式如範例
範例輸入
7 4
3 1 5 7
6 6
6 1 3 2 5 4
6 8
6 1 1 1 2 5 2 5
範例輸出
2 4 6
@
3 4

程式:
#include
using namespace std;
//---------------------------------------
int main(){
int N,M,z,y,c,v;
int a[10005];
while(cin>>N>>M){ //輸入資料 如果沒有資料 則循環結束
v=0;
int a[10005]={};
for(z=0;z<M;z++) //輸入資料
cin>>a[z];
for(z=1;z<=N;z++){ //檢驗參戰士兵的兵籍號碼
c=0;
for(y=0;y<M;y++){
if(z==a[y]) //a[y]==z代表士兵生還
c=1; //如果士兵生還 c==1
}
if(c==0){ //c==0代表士兵死亡
cout<<z<<" "; //如果士兵死亡 輸出兵籍號碼
v=1; //其設 v==1
}
}
if(v==0) //v==0代表士兵無人死亡
cout<<"@"; //其輸出"@"
cout<<endl;
}
}

dragonH iT邦超人 5 級 ‧ 2020-05-24 14:57:34 檢舉
就附上你的解題過程呀

畢竟不可能沒有任何解題邏輯就寫出來答案

老師的想法應該是這樣 (☞゚ヮ゚)☞
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
2
sx0800
iT邦新手 1 級 ‧ 2020-05-25 06:12:17

請問「輸入說明」之後的敘述是同學您要給老師的答案嗎? 我看不懂 ><

若就那以上的題目來看我的解法會是,用回來的士兵與出去的士兵比對(兵籍號碼) ,沒出現的就是已掛點或逃兵。
1 讀進全部士兵資料 = A
2 讀進回來士兵的資料 = B
3 以 B 資料逐一與 A 資料做比對,若存在就刪除 A 中該筆資料
4 去除 A 中重複的資料
5 我女兒是你學姊

0
I code so I am
iT邦高手 1 級 ‧ 2020-05-25 10:43:38

可以畫流程圖說明會比文字描述清楚,如果不會畫流程圖,google 一下。

3
通靈亡
iT邦高手 1 級 ‧ 2020-05-25 15:25:50

所以你的老師,根本不相信程式是你自己寫的。

我只幫你重新翻譯你的註解,請用父母賜予你的大腦自己想一次。
替幫你寫這題程式碼的大大感到難過。

看你上次說讀完提問的智慧。
為何這次還是用伸手牌的方式直接把問題丟在別人臉上,連嘗試都不願意嘗試?
說難聽點,你知道你這樣的行為很像乞丐嗎...?

#include <iostream>

using namespace std;

int main() 
{
  int N, M, z, y, c, v;
  int a[10005];
  
  // 依序輸入全部的士兵數量N、生還的士兵數量M
  while (cin >> N >> M) 
  { 
    v = 0;
    int a[10005] = {};
    
    // 輸入所有生還的士兵號碼名單
    for (z = 0; z < M; z++) 
    {
        cin >> a[z]; 
    } 
      
    // 從1號開始,依序檢查每一位士兵是否在生還名單當中
    for (z = 1; z <= N; z++) 
    { 
      c = 0;
      
      for (y = 0; y < M; y++) 
      {
        // 如果目前的士兵有在生還名單,C標註為1
        if (z == a[y]) 
        {
          c = 1;
        }
      }
      
      // 如果c標註為0,代表目前的士兵不在生還名單,將死亡的士兵號碼輸出
      if (c == 0) 
      { 
        cout << z << " ";
        v = 1; // 因為有士兵死亡,所以將v標註為1
      }
    }
    
    // 所有的士兵依序檢查完後,如果v標註為0,代表全部的士兵生還,輸出"@"
    if (v == 0) 
    {
        cout << "@";
    }

    cout << endl;
  }
}
ant1017 iT邦新手 2 級 ‧ 2020-05-25 17:11:36 檢舉

跑去要,然後終於要到了,結果,拿到東西卻不知道怎麼用...

我要發表回答

立即登入回答