1089 狼人杀-简单版(20 分)

以下文字摘自《灵机一动·好玩的数学》:“狼人杀”游戏分为狼人、好人两大阵营。在一局“狼人杀”游戏中,1 号玩家说:“2 号是狼人”,2 号玩家说:“3 号是好人”,3 号玩家说:“4 号是狼人”,4 号玩家说:“5 号是好人”,5 号玩家说:“4 号是好人”。已知这 5 名玩家中有 2 人扮演狼人角色,有 2 人说的不是实话,有狼人撒谎但并不是所有狼人都在撒谎。扮演狼人角色的是哪两号玩家?

本题是这个问题的升级版:已知 N 名玩家中有 2 人扮演狼人角色,有 2 人说的不是实话,有狼人撒谎但并不是所有狼人都在撒谎。要求你找出扮演狼人角色的是哪几号玩家?

输入格式:

输入在第一行中给出一个正整数 N(5)。随后 N 行,第 i 行给出第 i 号玩家说的话(1),即一个玩家编号,用正号表示好人,负号表示狼人。

输出格式:

如果有解,在一行中按递增顺序输出 2 个狼人的编号,其间以空格分隔,行首尾不得有多余空格。如果解不唯一,则输出最小序列解 —— 即对于两个序列 [ 和 [,若存在 0 使得 [ (ik),且 [,则称序列 A 小于序列 B。若无解则输出 No Solution

输入样例 1:

5
-2
+3
-4
+5
+4

输出样例 1:

1 4

输入样例 2:

6
+6
+3
+1
-5
-2
+4

输出样例 2(解不唯一):

1 5

输入样例 3:

5
-2
-3
-4
-5
-1

输出样例 3:

No Solution

遍历,选择两个人为狼,然后遍历所有人说的话,如果如果一个人说的狼不是这两个人或者好人是这两个人,那么他就在说假话,如果恰好一个狼和一个好人说了假话,直接记录狼的好跳出循环。
代码:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <map>
#include <cstring>
#include <algorithm>

using namespace std;
int a[101],n,vis[101];
int sw,bw;
int main() {
    scanf("%d",&n);
    for(int i = 1;i <= n;i ++) {
        scanf("%d",&a[i]);
    }
    for(int i = 1;i < n;i ++) {
        for(int j = i + 1;j <= n;j ++) {
            int lieh = 0,liew = 0;
            for(int k = 1;k <= n;k ++) {
                if(a[k] < 0 && -a[k] != i && -a[k] != j || a[k] > 0 && (a[k] == i || a[k] == j)) {
                    if(k != i && k != j) lieh += 1;
                    else liew ++;
                }
            }
            if(liew == 1 && lieh == 1) {
                sw = i;
                bw = j;
                break;
            }
        }
        if(sw)break;
    }
    if(sw)printf("%d %d",sw,bw);
    else printf("No Solution");
}

 

 

转载于:https://www.cnblogs.com/8023spz/p/9617998.html

以下是关于简单狼人游戏规则及其实现方式的总结: --- ### 简化狼人游戏规则 1. **参与人数** 游戏通常需要 6 至 12 名玩家,其中包含平民、狼人和其他特殊身份(例如预言家)。简化本可以减少角色数量。 2. **角色配** - 平民:多数玩家担任此角色,目标是找出并投票驱逐所有狼人- 狼人:少数玩家担任此角色,目标是在不被发现的情况下消灭所有平民。 - 特殊角色(可选):如预言家、女巫等,用于增加策略深度。 3. **游戏流程** - 白天阶段:所有人讨论并投票决定驱逐一名玩家。 - 夜晚阶段:狼人选择攻击一名玩家;特殊角色执行能力(如有)。 4. **胜利条件** - 狼人获胜:当狼人的数量等于或超过平民的数量时。 - 平民获胜:成功驱逐所有狼人--- ### 简化狼人的游戏实现方式 #### 方法一:手动实现(线下玩法) - 准备卡片或纸条标明不同角色的身份。 - 主持人负责记录夜晚行动的结果以及白天的投票情况。 - 参与者轮流发言,模拟真实社交互动。 #### 方法二:编程实现(线上玩法) 可以通过编写程序来自动化大部逻辑。以下是一个基本框架示例: ```python import random def assign_roles(num_players): roles = ['Wolf'] * 2 + ['Villager'] * (num_players - 2) random.shuffle(roles) return roles def game_loop(players, roles): day = 1 while True: print(f"\nDay {day}: Discuss and vote.") # Simulate discussion phase here. voted_out = input("Enter the index of player to be eliminated: ") if not voted_out.isdigit() or int(voted_out) >= len(players): print("Invalid choice!") continue eliminated_player = players[int(voted_out)] print(f"{eliminated_player} has been eliminated.") # Check win conditions... wolves_left = sum([1 for r in roles if r == 'Wolf']) villagers_left = sum([1 for r in roles if r != 'Wolf']) if wolves_left == 0: print("\nVillagers Win!") break elif wolves_left >= villagers_left: print("\nWolves Win!") break print("\nNight falls...") attacked_player_index = random.randint(0, len(players)-1) print(f"Wolf attacks Player {players[attacked_player_index]}.") del players[attacked_player_index] del roles[attacked_player_index] day += 1 if __name__ == "__main__": num_players = int(input("How many players? ")) players = list(range(1, num_players+1)) roles = assign_roles(num_players) print("Roles assigned:", dict(zip(players, roles))) game_loop(players, roles) ``` #### 方法三:利用现有平台 许多在线平台已经提供了简化的狼人模式,可以直接使用而无需开发新系统。例如: - Tabletop Simulator - Werewolf Online Games --- ### 注意事项 - 如果希望进一步简化规则,可以选择去掉特殊角色,只保留平民和狼人两种基础身份。 - 编程实现时需确保随机性和公平性,避免出现漏洞导致游戏失去趣味。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值