0.0寒假搞笑作->最强逻辑题的最直观代码实现

        前几天在人人上看到了一个名为最强逻辑题的东西,听说是微软的面试题目。然后看到我交一学长的代码,感觉好~漂亮= =于是就写了一份,好久没写过这么爽的代码了- -逻辑清楚的不行- -233333

        题目是这个样子的:


        题目不是很难,可以第一想法差不多应该是深搜~?No,显然应该10重循环嘛0.0效率是什么,能吃嘛~?

代码就是这样滴~

#include <iostream>
#include <cmath>

using namespace std;

int numberOfAnswer(int* ans, int testNumber)
{
	int count = 0;
	for (int i = 1; i < 11; i++)
	{
		if (ans[i] == testNumber)
			count++;
	}
	return count;
}

int sameNumberAsAnswerA(int* ans)
{
	int number[6] = { 0, 0, 0, 0, 0, 0 };
	int test = numberOfAnswer(ans, 1);
	for (int answer = 2; answer <= 5; answer++)
	{
		for (int i = 1; i < 11; i++)
		{
			if (ans[i] == answer)
				number[answer]++;
		}
	}
	for (int i = 2; i < 6; i++)
	{
		if (test == number[i])
			return i;
	}
	return 6;
}

bool SameAnswerAsNo3(int *ans)
{
	if (ans[3] == ans[1] && ans[3] == 1)
		return true;
	else if (ans[3] == ans[2] && ans[3] == 2)
		return true;
	else if (ans[3] == ans[4] && ans[3] == 3)
		return true;
	else if (ans[3] == ans[7] && ans[3] == 4)
		return true;
	else if (ans[3] == ans[6] && ans[3] == 5)
		return true;
	else return false;
}

int fxxkTheNinth(int number)
{
	if (number == 3 || number == 7)
		return 1;
	else if (number == 10)
		return 5;
	else if (number == 4 || number == 9)
		return 3;
	else if (number == 6)
		return 2;
	else if (number == 8)
		return 4;
	else return 6;
}

bool overlap(int *ans)
{
	int count = 0;
	for (int i = 2; i < 11; i++)
		if (ans[i - 1] == ans[i])
			count++;
	if (count == 1)
		return true;
	else return false;
}

void printArray(int *ans)
{
	for (int i = 1; i < 11; i++)
	{
		if (ans[i] == 1)
			cout << "A ";
		else if (ans[i] == 2)
			cout << "B ";
		else if (ans[i] == 3)
			cout << "C ";
		else if (ans[i] == 4)
			cout << "D ";
		else if (ans[i] == 5)
			cout << "E ";
		else
			cout << "GG";
	}
	cout << "\nend\n";
}

int main()
{
	int ans[11];
	for (ans[1] = 1; ans[1] <= 5; ans[1]++)
		for (ans[2] = 1; ans[2] <= 5; ans[2]++)
			for (ans[3] = 1; ans[3] <= 5; ans[3]++)
				for (ans[4] = 1; ans[4] <= 5; ans[4]++)
					for (ans[5] = 1; ans[5] <= 5; ans[5]++)
						for (ans[6] = 1; ans[6] <= 5; ans[6]++)
							for (ans[7] = 1; ans[7] <= 5; ans[7]++)
								for (ans[8] = 1; ans[8] <= 5; ans[8]++)
									for (ans[9] = 1; ans[9] <= 5; ans[9]++)
										for (ans[10] = 1; ans[10] <= 5; ans[10]++)
										{
											if (ans[ans[1] + 1] == 2)//Q1
												if ((ans[ans[2] + 1] == ans[ans[2] + 2]) && overlap(ans))//Q2
													if (SameAnswerAsNo3(ans))//Q3
														if (ans[4] - 1 == numberOfAnswer(ans, 1))//Q4
															if (ans[5] == ans[11 - ans[5]])//Q5
																if (sameNumberAsAnswerA(ans) == ans[6] + 1)//Q6
																	if (abs(ans[7] - ans[8]) == 5 - ans[7])//Q7
																		if (ans[8] + 1 == numberOfAnswer(ans, 1) + numberOfAnswer(ans, 5))//Q8
																			if (ans[9] == fxxkTheNinth(numberOfAnswer(ans, 2) + numberOfAnswer(ans, 3) + numberOfAnswer(ans, 4)))
																				if (ans[10] == ans[10])
																					printArray(ans);
										}
	system("pause");
}

0.0第一次写这么深的循环,这么漂亮的if嵌套,写完还真有点小激动那o(^▽^)o

= =这排版毁了原本的美感- -就截个图吧


不能更美丽!233333333


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值