hdu 1427速算24點(列舉全排列)
題意: 算24點相信絕大多數人都玩過。就是隨機給你四張牌,包括A(1),2,3,4,5,6,7,8,9,10,J(11),Q(12),K(13)。要求只用'+','-','*','/'運算子以及括號改變運算順序,使得最終運算結果為24(每個數必須且僅能用一次)。遊戲很簡單,但遇到無解的情況往往讓人很鬱悶。你的任務就是針對每一組隨機產生的四張牌,判斷是否有解。我們另外規定,整個計算過程中都不能出現小數
e鳴杯碰到過這道題,當時手算沒算出來現在算報了一箭之仇了吧蛤蛤。但是不一樣的是這道題運算過程中不會出現小數,有一個坑是當輸入是10的時候其實我只讀了1,這也是一開始老wa的原因。
這道題直接暴力有點不和諧,所以可以用next_permutation()來做,總結一下,其實所有運算都可以歸結為兩類,一類是((
程式碼如下:
#include<cstdio> #include<cstring> #include<cmath> #include<cstdlib> #include<iostream> #include<algorithm> #include<vector> #include<map> #include<queue> #include<stack> #include<string> #include<map> #include<set> using namespace std; #define LL long long const int INF = 100000000; int a[6]; int sol_input(char ch) { if(ch == 'A') return 1; else if(ch == 'J') return 11; else if(ch == 'Q') return 12; else if(ch == 'K') return 13; else if(ch == '1') return 10; else return ch - '0'; } int oper(int i, int m, int n) { //列舉四種運算子 if(i == 1) return m + n; if(i == 2) return m - n; if(i == 3) return m * n; if(n == 0 || m % n != 0) return INF; else return m / n; } bool calcu1(int i, int j, int k) { //計算順序1 ((
[email protected])@c)@d int tmp1 = oper(i, a[0], a[1]); int tmp2 = oper(j, tmp1, a[2]); int tmp3 = oper(k, tmp2, a[3]); if(tmp3 == 24 || tmp3 == -24) return true; return false; } bool calcu2(int i, int j, int k) { //計算順序2 ([email protected])@([email protected]) int tmp1 = oper(i, a[0], a[1]); int tmp2 = oper(k, a[2], a[3]); int tmp3 = oper(j, tmp1, tmp2); if(tmp3 == 24 || tmp3 == -24) return true; return false; } int main() { char s[2]; while(scanf("%s", s) != EOF) { a[0] = sol_input(s[0]); for(int i = 1; i <= 3; i++) { scanf("%s", s); a[i] = sol_input(s[0]); } int flag = 0; sort(a, a+4); do { for(int i = 1; i <= 4; i++) for(int j = 1; j <= 4; j++) for(int k = 1; k <= 4; k++) { if(calcu1(i, j, k) || calcu2(i, j, k)) flag = 1; } } while(next_permutation(a, a+4) && !flag); if(flag) printf("Yes\n"); else printf("No\n"); } return 0; }
相關推薦
hdu 1427速算24點(列舉全排列)
題意: 算24點相信絕大多數人都玩過。就是隨機給你四張牌,包括A(1),2,3,4,5,6,7,8,9,10,J(11),Q(12),K(13)。要求只用'+','-','*','/'運算子以及
HDU 1427 速算24點【數值型DFS】
tar include 任務 div accepted ostream while accep urn 速算24點 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/O
TOJ 1344 速算24點(全排列+dfs)
i++ ace family lse pre == ott != 結果 描述 速算24點相信絕大多數人都玩過。就是隨機給你四張牌,包括A(1),2,3,4,5,6,7,8,9,10,J(11),Q(12),K(13)。要求只用‘+‘,‘-‘,‘*‘,‘/‘運算符以及括號改
速算24點 深搜的進一步體會
題目描述 速算24點相信絕大多數人都玩過。就是隨機給你四張牌,包括 A(1),2,3,4,5,6,7,8,9,10,J(11),Q(12),K(13)。要求只用'+','-','*','/'運算子以及括號改變運算順序,使得最終運算結果為24(每個數必須且僅能用一次)。
hdu1427 速算24點
mes clear comment com style rii view code else if </pre><pre> //#pragma com
演算法——分蘋果問題和算24問題(遞迴演算法)
#include <iostream>using namespace std;/*分為n>m和n<m兩種情況。當n>m時,一定有盤子為空,此時f(m,n)=f(m,m)當n<=m時,分為有盤子為空時(至少有一個盤子為空):f(m,n-1),
P1691 有重複元素的排列問題 (模擬全排列)
題目描述 設R={r1,r2,……,rn}是要進行排列的n個元素。其中元素r1,r2,……,rn可能相同。使設計一個演算法,列出R的所有不同排列。 給定n以及待排列的n個元素。計算出這n個元素的所有不同排列。 輸入輸出格式 輸入格式: 第1行:元素個數n(1&l
2018hdu杭電多校第五場 hdu6351 Beautiful Now(暴力全排列)
Beautiful Now Time Limit: 5000/2500 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) Total Submission(s): 1677 Accepted
【dfs套dfs套dfs】算24點
Luogu P1236 算24點 值得紀念一下 1 #include<cstdio> 2 #include<iostream> 3 #define ri register int 4 #define ll long long 5 usi
P1236 算24點
題目描述 幾十年前全世界就流行一種數字遊戲,至今仍有人樂此不疲.在中國我們把這種遊戲稱為“算24點”。您作為遊戲者將得到4個1~9之間的自然數作為運算元,而您的任務是對這4個運算元進行適當的算術運算,要求運算結果等於24。 您可以使用的運算只有:+,-,,/,您還可以使用()來改變運算順
C#實現的算24點遊戲的算法的代碼
number putc .text true gen als 算法 ack char s 下面資料是關於C#實現的算24點遊戲的算法的內容,希望能對碼農們有所用處。 using System; using System.Collections.Generic; using
Java 算24點
import java.util.Scanner;//測試過了,大概的都能算出來,不過bug還是有點多,發現的評論區說一下我再改改public class The_24 {public static void main(String[] args) {int[] a = ne
玩玩24點(中)
《玩玩24點》系列: 上篇 中篇 序 在上篇中,我用上位機程式遍歷了4個1~13的數的1820種組合,通過遞迴窮舉計算出其中1362組的24點接法,並轉換為二進位制形式,放到微控制器程式中,減少了微控制器24點遊戲程式的計算量,獲得了不錯的遊戲體驗。 上篇的最後留了一個瘋狂暗示,但時至如今我也沒有實現出來
python例項:解決經典撲克牌遊戲 -- 四張牌湊24點 (一)
Hey! Hope you are having a great day so far! 今天想和大家討論的是一道我從這學期cs的期末考試得到靈感的題:Get 24 Poker Game。說到 Get 24 Poker Game,也就是我們通常說的湊24點,大家可能都比較熟悉。但是因為這個遊戲有很多變
python例項:解決經典撲克牌遊戲 -- 四張牌湊24點 (二)
Hey! 如果你還沒有看這篇的上文的話,可以去稍稍瞅一眼,會幫助加速理解這一篇裡面涉及到的遞迴結構哦!(上一篇點這裡:《python例項:解決經典撲克牌遊戲 -- 四張牌湊24點 (一)》) 如果你已經看完了第一部分的解析,那我們可以來繼續上道題的第二部分。 根據第一部分的分析,第二部分的難點主要
算法整理(php語言完成),持續更行中......
== 排序 pre cnblogs 部分 兩個 div function col 一下所有實例中,均在同一個方法中,所以算法使用內部函數完成 歸並排序 1 public function test1Action () { 2 $tmp = 0; 3
HDU 1308 What Day Is It?(模擬,日期)
else 天數 pre names 一點 val return can 星期幾 解題報告:輸入一個年月日,讓你求出那一天是星期幾,但是做這題之前必須先了解一點歷史。首先在1582年之前,判斷是否是閏年的標準是只要能被四整除就是閏年, 然後在1752年9月2號的後的11天被
【算法拾遺(java描寫敘述)】--- 插入排序(直接插入排序、希爾排序)
ecan itblog insert med image java程序 can rip title 插入排序基本思想 每次將一個待排序的記錄按其keyword大小插入到前面已經拍好序的子文件的適當位置,直到全部記錄插入完畢為止。 直接插入
HDU 6141 I am your Father!(最小樹形圖)
truct 操作 div blog 直接 .cn clu lld 最小樹形圖 【題目鏈接】 http://acm.hdu.edu.cn/showproblem.php?pid=6141 【題目大意】 給出一個有向圖,求1點為根的最小樹形圖使得第n個點的直
2017中國大學生程序設計競賽 - 網絡選拔賽 HDU 6154 CaoHaha's staff(幾何找規律)
hdu number ngs malle else ios you friend style Problem Description "You shall not pass!"After shouted out that,the Force Staff appered i