1. 程式人生 > >PAT-BASIC1089——狼人殺-簡單版

PAT-BASIC1089——狼人殺-簡單版

我的PAT-BASIC程式碼倉:https://github.com/617076674/PAT-BASIC

原題連結:https://pintia.cn/problem-sets/994805260223102976/problems/1038429385296453632

題目描述:

知識點:暴力破解法

思路:暴力破解,遍歷所有可能的狼人組合

時間複雜度是O(N ^ 2)。空間複雜度是O(1)。

C++程式碼:

#include<iostream>
#include<string>

using namespace std;

int changeToNum(string s);

int main(){
	int N;
	cin >> N;
	string input[N];
	string tempString;
	for(int i = 0; i < N; i++){
		cin >> tempString;
		input[i] = tempString;
	}
	int wolf1;
	int wolf2;
	int flags[N];
	int count;	
	for(wolf1 = 0; wolf1 < N; wolf1++){
		for(wolf2 = wolf1 + 1; wolf2 < N; wolf2++){
			count = 0;
			for(int i = 0; i < N; i++){
				if(input[i][0] == '-'){
					if(changeToNum(input[i]) != wolf1 + 1 && changeToNum(input[i]) != wolf2 + 1){
						count++;
						flags[i] = 1;
					}else{
						flags[i] = 0;
					}
				}else if(input[i][0] == '+'){
					if(changeToNum(input[i]) == wolf1 + 1 || changeToNum(input[i]) == wolf2 + 1){
						count++;
						flags[i] = 1;
					}else{
						flags[i] = 0;
					}
				}
			}
			if(count == 2 && (flags[wolf1] + flags[wolf2] == 1)){
				printf("%d %d", wolf1 + 1, wolf2 + 1);
				return 0;
			}
		}
	}
	printf("No Solution");
	return 0;
}

int changeToNum(string s){
	int result = 0;
	for(int i = 1; i < s.length(); i++){
		result = result * 10 + s[i] - '0';
	}
	return result;
}

C++解題報告: