Post by huangno1 on Mar 2, 2017 20:45:06 GMT -8
程式說明
程式將隨機產生數隻怪物,並消滅其中最弱的一隻怪物。
每隻怪物的屬性有編號、攻擊力和防禦力。
使用者需輸入怪物數量,程式最多只會產生 5 隻怪物。
怪物的攻擊力和防禦力為 1-10 的隨機數值。
程式會先列印出原本的所有怪物資訊,空一行。
接著,列印出消滅最弱怪物後的所有怪物資訊。
所謂最弱怪物為攻擊力和防禦力總和最小的那一隻。
範例一(使用者輸入 3):
Monster 1 : att: 6 def: 7
Monster 2 : att: 9 def: 6
Monster 3 : att: 5 def: 1
Monster 3 : att: 5 def: 1
範例二(使用者輸入 10):
Monster 1 : att: 6 def: 7
Monster 2 : att: 9 def: 6
Monster 3 : att: 5 def: 1
Monster 4 : att: 1 def: 2
Monster 5 : att: 6 def: 7
Monster 4 : att: 1 def: 2
#include <stdio.h>
#include <stdlib.h>
// ----------------------------------------------
// 怪物屬性為 id, att, def,均為整數
// ----------------------------------------------
struct Monster
{
int id = 0;
int att = 0,
def = 0;
};
// ----------------------------------------------
// 傳入怪物 id,產生一隻怪物,設定其 id,
// 隨機產生 att/def 數值(介於 1~10),
// 回傳此怪物。
// ----------------------------------------------
Monster GenerateMonster(int id)
{
Monster m ;
m.id = id ;
m.att = rand( ) % 10 + 1 ;
m.def = rand( ) % 10 + 1 ;
return m ;
}
// ----------------------------------------------
// 輸出一隻怪物屬性。
// ----------------------------------------------
void Output(Monster m)
{
printf("Monster %d : att: %d def: %d\n", m.id, m.att, m.def);
}
// ----------------------------------------------
const int MaxNumMonsters = 5;
struct MonsterTeam
{
Monster monsters[MaxNumMonsters];
int size = 0;
};
// ----------------------------------------------
// 新增一隻怪物
// 若無法加入(已達容量上限),回傳 0;否則回傳 1。
// ----------------------------------------------
int AddMonster(MonsterTeam *team, Monster m)
{
if ( m.id > MaxNumMonsters )
return 0 ;
else
{
team -> monsters [ team -> size ] = m ;
team -> size ++ ;
return 1 ;
}
}
// ----------------------------------------------
// 輸出所有怪物
// ----------------------------------------------
void Output(const MonsterTeam *team)
{
int i ;
for ( i = 0 ; i < team -> size ; i ++ ) {
if ( team -> monsters[ i ].att > 0 )
printf ( "Monster %d : att: %d def: %d\n" , team -> monsters[ i ].id , team -> monsters[ i ].att , team -> monsters [ i ].def ) ;
}
}
// ----------------------------------------------
// 回傳怪物能力總和
// ----------------------------------------------
int Power(Monster m) { return m.att + m.def; }
// ----------------------------------------------
// 回傳最弱(能力和最低)怪物的索引值。
// 最有多於一隻,回傳最小的索引值。
// 若無怪物,回傳 -1。
// ----------------------------------------------
int FindWeakestMonster(
const MonsterTeam *team
)
{
int i ;
int powerValue = 5000 ;
int weakestid ;
for ( i = 0 ; i < team -> size ; i++ )
{
int temp = Power ( team -> monsters [ i ] ) ;
if ( temp < powerValue ) {
powerValue = temp ;
weakestid = team -> monsters [ i ].id ;
}
}
return weakestid ;
}
// ----------------------------------------------
// 刪除掉指定索引值的怪物。
// 若索引值錯誤,回傳 0;否則,回傳 1。
// ----------------------------------------------
int Remove(
MonsterTeam* team , int weakestid
)
{
int i ;
for ( i = 0 ; i < MaxNumMonsters ; i++ ) {
if ( team -> monsters [ i ].id == weakestid )
team -> monsters [ i ].att = 0 ;
}
}
// ----------------------------------------------
int main()
{
srand(3);
MonsterTeam monster_team;
// 輸入有幾隻怪物
int n = 0;
scanf("%d", &n);
// 怪物數不可超過上限
n = (n<=MaxNumMonsters ? n : MaxNumMonsters);
for (int i=1; i<=n; i+=1)
{
// 新增一隻怪物
AddMonster(&monster_team, GenerateMonster(i));
}
// 輸出所有怪物
Output(&monster_team);
putchar('\n');
// 消滅最弱怪物
Remove(&monster_team, FindWeakestMonster(&monster_team));
// 輸出所有怪物
Output(&monster_team);
return 0;
}
程式將隨機產生數隻怪物,並消滅其中最弱的一隻怪物。
每隻怪物的屬性有編號、攻擊力和防禦力。
使用者需輸入怪物數量,程式最多只會產生 5 隻怪物。
怪物的攻擊力和防禦力為 1-10 的隨機數值。
程式會先列印出原本的所有怪物資訊,空一行。
接著,列印出消滅最弱怪物後的所有怪物資訊。
所謂最弱怪物為攻擊力和防禦力總和最小的那一隻。
範例一(使用者輸入 3):
Monster 1 : att: 6 def: 7
Monster 2 : att: 9 def: 6
Monster 3 : att: 5 def: 1
Monster 3 : att: 5 def: 1
範例二(使用者輸入 10):
Monster 1 : att: 6 def: 7
Monster 2 : att: 9 def: 6
Monster 3 : att: 5 def: 1
Monster 4 : att: 1 def: 2
Monster 5 : att: 6 def: 7
Monster 4 : att: 1 def: 2
#include <stdio.h>
#include <stdlib.h>
// ----------------------------------------------
// 怪物屬性為 id, att, def,均為整數
// ----------------------------------------------
struct Monster
{
int id = 0;
int att = 0,
def = 0;
};
// ----------------------------------------------
// 傳入怪物 id,產生一隻怪物,設定其 id,
// 隨機產生 att/def 數值(介於 1~10),
// 回傳此怪物。
// ----------------------------------------------
Monster GenerateMonster(int id)
{
Monster m ;
m.id = id ;
m.att = rand( ) % 10 + 1 ;
m.def = rand( ) % 10 + 1 ;
return m ;
}
// ----------------------------------------------
// 輸出一隻怪物屬性。
// ----------------------------------------------
void Output(Monster m)
{
printf("Monster %d : att: %d def: %d\n", m.id, m.att, m.def);
}
// ----------------------------------------------
const int MaxNumMonsters = 5;
struct MonsterTeam
{
Monster monsters[MaxNumMonsters];
int size = 0;
};
// ----------------------------------------------
// 新增一隻怪物
// 若無法加入(已達容量上限),回傳 0;否則回傳 1。
// ----------------------------------------------
int AddMonster(MonsterTeam *team, Monster m)
{
if ( m.id > MaxNumMonsters )
return 0 ;
else
{
team -> monsters [ team -> size ] = m ;
team -> size ++ ;
return 1 ;
}
}
// ----------------------------------------------
// 輸出所有怪物
// ----------------------------------------------
void Output(const MonsterTeam *team)
{
int i ;
for ( i = 0 ; i < team -> size ; i ++ ) {
if ( team -> monsters[ i ].att > 0 )
printf ( "Monster %d : att: %d def: %d\n" , team -> monsters[ i ].id , team -> monsters[ i ].att , team -> monsters [ i ].def ) ;
}
}
// ----------------------------------------------
// 回傳怪物能力總和
// ----------------------------------------------
int Power(Monster m) { return m.att + m.def; }
// ----------------------------------------------
// 回傳最弱(能力和最低)怪物的索引值。
// 最有多於一隻,回傳最小的索引值。
// 若無怪物,回傳 -1。
// ----------------------------------------------
int FindWeakestMonster(
const MonsterTeam *team
)
{
int i ;
int powerValue = 5000 ;
int weakestid ;
for ( i = 0 ; i < team -> size ; i++ )
{
int temp = Power ( team -> monsters [ i ] ) ;
if ( temp < powerValue ) {
powerValue = temp ;
weakestid = team -> monsters [ i ].id ;
}
}
return weakestid ;
}
// ----------------------------------------------
// 刪除掉指定索引值的怪物。
// 若索引值錯誤,回傳 0;否則,回傳 1。
// ----------------------------------------------
int Remove(
MonsterTeam* team , int weakestid
)
{
int i ;
for ( i = 0 ; i < MaxNumMonsters ; i++ ) {
if ( team -> monsters [ i ].id == weakestid )
team -> monsters [ i ].att = 0 ;
}
}
// ----------------------------------------------
int main()
{
srand(3);
MonsterTeam monster_team;
// 輸入有幾隻怪物
int n = 0;
scanf("%d", &n);
// 怪物數不可超過上限
n = (n<=MaxNumMonsters ? n : MaxNumMonsters);
for (int i=1; i<=n; i+=1)
{
// 新增一隻怪物
AddMonster(&monster_team, GenerateMonster(i));
}
// 輸出所有怪物
Output(&monster_team);
putchar('\n');
// 消滅最弱怪物
Remove(&monster_team, FindWeakestMonster(&monster_team));
// 輸出所有怪物
Output(&monster_team);
return 0;
}