「杂题乱刷」CF468A

原题链接

CF468A 24 Game

题目简述

现在有一个序列 n 包含 n 个整数 1n,如果我们能经过加减乘三种操作让这个序列只剩下 24,如果可以,输出 YES 并给出构造方案,否则输出 NO

解题思路

首先不难看出,如果 n 小于 4 的话,那么是一定不能构造出方案的,因为无论你怎么操作,结果都不可能大于 24,但是当 n 大于等于 4 的时候,那么是一定能构造出方案的,证明如下:

  1. 如果 n 为奇数,那么只需要用 15 凑出 24,然后再把剩下没操作过的相邻的数依次相减,再与 24 相乘即可;
  2. 如果 n 为偶数,那么只需要用 14 凑出 24,然后再把剩下没操作过的相邻的数依次相减,再与 24 相乘即可。

以下是 141524 点的方法:

14

1*2=2 2*3=6 6*4=24

15

2*4=8 3*5=15 15+8=23 23+1=24

参考代码

#include<bits/stdc++.h>
using namespace std;
#define QwQ return 0;
long long n;
int main()
{
	cin>>n;
	if(n<=3)//如果n小于4
	{
		cout<<"NO";//直接输出NO
		return 0;
	}
	else//如果n大于等于4
	{
		cout<<"YES"<<endl;//输出YES
		if(n%2)//如果n为奇数
		{
			cout<<"2 * 4 = 8"<<endl<<"3 * 5 = 15"<<endl<<"15 + 8 = 23"<<endl<<"23 + 1 = 24"<<endl;
			for(int i=n;i>5;i-=2)//将剩下的数依次相减
				cout<<i<<" - "<<i-1<<" = "<<"1"<<endl<<"24 * 1 = 24"<<endl;			
		}
		else//如果n为偶数
		{
			cout<<"1 * 2 = 2"<<endl<<"2 * 3 = 6"<<endl<<"4 * 6 = 24"<<endl;
			for(int i=n;i>4;i-=2)//将剩下的数依次相减
				cout<<i<<" - "<<i-1<<" = "<<"1"<<endl<<"24 * 1 = 24"<<endl;
		}
	}
	QwQ;
}

posted @   wangmarui  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
点击右上角即可分享
微信分享提示