洛谷 P1236 算24點

2021-08-04 12:26:20 字數 2010 閱讀 3093

題目描述

幾十年前全世界就流行一種數字遊戲,至今仍有人樂此不疲.在中國我們把這種遊戲稱為「算24點」。您作為遊戲者將得到4個1~9之間的自然數作為運算元,而您的任務是對這4個運算元進行適當的算術運算,要求運算結果等於24。

您可以使用的運算只有:+,-,,/,您還可以使用()來改變運算順序。注意:所有的中間結果須是整數,所以一些除法運算是不允許的(例如,(2*2)/4是合法的,2(2/4)是不合法的)。下面我們給出乙個遊戲的具體例子:

若給出的4個運算元是:1、2、3、7,則一種可能的解答是1+2+3*7=24。

輸入輸出格式

輸入格式:

只有一行,四個1到9之間的自然數。

輸出格式:

如果有解的話,只要輸出乙個解,輸出的是三行資料,分別表示運算的步驟。其中第一行是輸入的兩個數和乙個運算子和運算後的結果,第二行是第一行的結果和乙個輸入的資料、運算子、運算後的結果,或者是另外兩個數的輸出結果;第三行是前面的結果第二行的結果或者剩下的乙個數字、運算子和「=24」。如果兩個運算元有大小的話則先輸出大的。

如果沒有解則輸出「no answer!」

如果有多重合法解,輸出任意一種即可。

注:所有運算結果均為正整數

輸入輸出樣例

輸入樣例#1:

1 2 3 7

輸出樣例#1:

2+1=3

7*3=21

21+3=24

看到前面題解只給了標程卻沒有給出易錯的地方,我決定寫篇題解來補充一下,順便給幾組自創資料來幫大家檢驗程式。

此題不需要優化,直接暴搜。

我的思路是從剩下的數中不斷列舉2個數,一一嘗試加減乘除四則運算。題目要求從較大數開始輸出,我就要求運算時前乙個量大於等於(一定要加「等於」!否則60分!)後乙個量。然後將結果存在較大量中,並設較小量為已訪問。跳過已訪問的數,不斷從第乙個數搜到第四個數搞運算,順便將運算符號和運算的兩個量存起來。當只剩最後乙個未訪問數時,若其為24,輸出即可。

思路很簡單,但很多小細節,值得注意。

易錯點:

1、當4個數中出現兩個及以上相同數時,注意兩數相同也可以進行運算,但必須保證運算的兩個量下標不同。(get60分)

輸入:2 2 2 4 輸出:2+2=4 4+2=6 6*4=24

2、運算中必須保證只有整除(無餘數)。

3、得出的24可以在4個數中的任意乙個(要把四個數全搜一遍)

4、運算中不能出現0和負數(特判解決)。

5、可能會出現兩個數反覆運算(即最後結果被設為已訪問),此時特判最後結果未訪問即可(get70分)。

6、必須保證24是最後一步算出來的(在運算出結果時判斷,若為24則return,get100分)。

輸入:1 2 4 6 輸出:2-1=1 4*1=4 6*1=24

#include

#include

#include

#include

#include

#include

using

namespace

std;

int a[4]={},vis[4]={},fh[4]={},a1[4]={},a2[4]={},f=0;//a用來存4個數,vis用來存該數是否訪問過(參與運算過),fh存運算過程中的符號,a1存運算過程中的較大量,a2存較小量(運算結果可以不存)

void check()//判斷+輸出過程

if(f==1) }

void dfs(int t)//t指現在還剩幾個數

if(t>1)

for(int i=0;i<4;i++)

if(a[i]==24) return;

for(int i=0;i<4;i++)

for(int j=0;j<4;j++)

if(vis[j]==0&&a[i]>=a[j]&&i!=j)//兩數相同必須保證兩數下標不同

}}int main()

ps:打完題解時我突然發現我的ac程式輸入1 1 1 24時會輸no answer!,但題目限定了4個數是在9以內的自然數,於是我就沒管了。

洛谷 P1236 算24點

題目描述 幾十年前全世界就流行一種數字遊戲,至今仍有人樂此不疲 在中國我們把這種遊戲稱為 算24點 您作為遊戲者將得到4個1 9之間的自然數作為運算元,而您的任務是對這4個運算元進行適當的算術運算,要求運算結果等於24。您可以使用的運算只有 您還可以使用 來改變運算順序。注意 所有的中間結果須是整數...

洛谷 P1236 算24點

我對狀態空間的理解 題目傳送門 算 24 點應該是大家耳熟能詳的遊戲了 這題 spj 要求把兩個要運算的數字較大的放在前面輸出 然後爆搜數字順序和運算子就可以了 真 暴力美學 時間複雜度 o 4 4 3 空間複雜度 o n 如下 include include include using names...

洛谷P1236 算24點 搜尋

給出四個整數,求能否經過一系列運算使得這四個數字最終組成24。注意 運算的任意時刻數字均必須為整數。很顯然的搜尋嘛。可以考慮每次列舉使用那兩個數字進行運算,然後再列舉使用哪一種運算方法 加減乘除 把用過的數字修改成 1.最終搜尋完之後判斷有沒有乙個數字變成了24即可。思路還是比較簡單,注意細節即可。...