題目:
二次世界大戰諾曼第登陸戰況激烈,盟軍雖勝但也犧牲慘重; 戰事結束後,士官長開始清點士兵人數,
透過士兵隨身的兵籍牌號碼,希望知道有多少士兵不幸陣亡,但人數眾多,清點不易,況且
兵籍號碼也出現重覆登記的現象,請你幫忙解決此一難題。
輸入說明
多筆測資,每筆測資兩行,
第一行兩個整數 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;
}
}
請問「輸入說明」之後的敘述是同學您要給老師的答案嗎? 我看不懂 ><
若就那以上的題目來看我的解法會是,用回來的士兵與出去的士兵比對(兵籍號碼) ,沒出現的就是已掛點或逃兵。
1 讀進全部士兵資料 = A
2 讀進回來士兵的資料 = B
3 以 B 資料逐一與 A 資料做比對,若存在就刪除 A 中該筆資料
4 去除 A 中重複的資料
5 我女兒是你學姊
我只幫你重新翻譯你的註解,請用父母賜予你的大腦自己想一次。
替幫你寫這題程式碼的大大感到難過。
看你上次說讀完提問的智慧。
為何這次還是用伸手牌的方式直接把問題丟在別人臉上,連嘗試都不願意嘗試?
說難聽點,你知道你這樣的行為很像乞丐嗎...?
#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;
}
}