烤鸡(洛谷P2089)

这个题其实是比较简单的,但很多人可能不敢写10个循环,比如我。。因为我当时想着10个循环,时间复杂度整这么高,不得把电脑算死,但实际上每个循环只运行3次,所以就还行

#include<iostream>
using namespace std;
int main() {
	int n;
	cin >> n;
	int score = 0;
	if (n < 9||n>30) {
		cout << 0 << "\n";
	}
	else {
		for(int a=1;a<=3;a++)for (int b = 1; b <= 3; b++)for (int c = 1; c <= 3; c++)for (int d = 1; d <= 3; d++)
			for (int e = 1; e <= 3; e++)for (int f = 1; f <= 3; f++)for (int g = 1; g <= 3; g++)for (int h = 1; h <= 3; h++)
				for (int i = 1; i <= 3; i++)for (int j = 1; j <= 3; j++)
					if (a + b + c + d + e + f + g + h + i + j==n) {
						score++;
				}
		cout << score << "\n";
		for (int a = 1; a <= 3; a++)for (int b = 1; b <= 3; b++)for (int c = 1; c <= 3; c++)for (int d = 1; d <= 3; d++)
			for (int e = 1; e <= 3; e++)for (int f = 1; f <= 3; f++)for (int g = 1; g <= 3; g++)for (int h = 1; h <= 3; h++)
				for (int i = 1; i <= 3; i++)for (int j = 1; j <= 3; j++)
					if (a + b + c + d + e + f + g + h + i + j == n) {
						cout<<a<<" " << b << " " << c << " " << d << " " << e << " " << f << " " << g << " " << h << " " << i << " " << j << " ";
						cout << "\n";
					}
	}
	
	return 0;
}

然后如果不想这么复杂的话可以加个宏定义

#define rep(i,a,b) for(int i=a;i<b;i++)

然后里面所有的循环都可以替换成这个宏定义,即rep(a,1,3)=for(int a=1;a<=3;a++)能够简单一点吧。

然后这道题理论上是还可以优化的,但是作者懒得优化了。(就是和是一定的,前面的数确定后,就可以约束后面数的范围)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值