演算法競賽入門經典:第六章 資料結構基礎 6.1卡片遊戲
/* 卡片遊戲: 桌上有一疊拍,從第一張牌(位於頂面的牌)開始從上往下依次編號為1~n。當至少還剩兩張牌時進行以下操作:把第一張牌扔掉,然後把新的第一張放到整疊牌 的最後。輸入n,輸出每次扔掉的牌,以及最後剩下的牌 思路: 設定剪枝陣列,凡是扔掉的牌,置剪枝標記為真,迴圈結束條件為還剩一張牌,有兩個迴圈:報數迴圈,每次報到的刪除,大迴圈,每次超過7進入下一次迴圈 關鍵:如何解決放在末尾的問題?用迴圈連結串列,每次放在後面。凡是放在後面,再為它開闢一個數組元素 用連結串列,找到末尾位置之後,從前向後遍歷,如果是新1,則在末尾後加上新1,一直到只剩一個元素位置,採用尾插法 首先建立單鏈表n 用佇列也可以做,前面彈出元素,後面末尾追加元素 */ #include <stdio.h> #include <stdlib.h> #include <queue> #define MAXSIZE 1024 using namespace std; void cardGame(int n) { queue<int> queueIntCard; for(int i = 1 ; i <= n;i++) { queueIntCard.push(i); } while(!queueIntCard.empty()) { printf("%d ",queueIntCard.front()); queueIntCard.pop(); if(queueIntCard.empty()) { break; } queueIntCard.push(queueIntCard.front()); queueIntCard.pop(); /*程式碼太煩,簡化 int iDel = queueIntCard.front(); printf("%d ",iDel); queueIntCard.pop(); if(queueIntCard.empty()) { break; } int iMove = queueIntCard.front(); queueIntCard.pop(); queueIntCard.push(iMove); */ } } void cardGame(int n,int i) { int m_queue[MAXSIZE]; int front = 0,rear = n;//關鍵,模擬佇列,設定隊首和隊尾 for(int i = 0; i < n;i++) { m_queue[i] = i+1; } while(front < rear) { printf("%d ",m_queue[front++]); m_queue[rear++] = m_queue[front++];//這個經典,將隊尾累加隊守元素,不需要設定剪枝陣列 } } int main(int argc,char* argv[]) { int n; while(EOF != scanf("%d",&n)) { cardGame(n,1); } system("pause"); return 0; }
相關推薦
演算法競賽入門經典:第六章 資料結構基礎 6.1卡片遊戲
/* 卡片遊戲: 桌上有一疊拍,從第一張牌(位於頂面的牌)開始從上往下依次編號為1~n。當至少還剩兩張牌時進行以下操作:把第一張牌扔掉,然後把新的第一張放到整疊牌 的最後。輸入n,輸出每次扔掉的牌,以及最後剩下的牌 思路: 設定剪枝陣列,凡是扔掉的牌,置剪枝標記為真,迴圈
《演算法競賽入門經典》第三章思考題
題目1(必要的儲存量) 陣列可以用來儲存很多資料,但在一些情況下,並不需要把資料儲存下來。下面哪些題目可以不借助陣列,哪些必須藉助陣列?請程式設計實現。假設輸入只能讀一遍。 1. 輸入一些數,統計個數。 2. 輸入一些數,求最大值、最小值和平均數。 3.
算法競賽入門經典題解——第三章 3-3數數字 UVa1225
() %d 入門 scan clu amp uva ++ tdi 我的思路是打表,但不一次性打出所有。目前已經計算出的最大n標記為max,假如一次輸入為n=13,就把n=max+1到13的結果都儲存到二維數組中。max初始為0 坑:每行輸出末尾不能有空格,但必須換行(包括最
算法競賽入門經典題解——第三章 3-4 周期串UVa455
() sca clas pan 可能 span amp tdi ++ 思路:遍歷可能的周期,比較s[k]與s[k%i](其中i為周期) #include <stdio.h> #include <stdlib.h> #include<str
演算法競賽入門經典(第2版)紫書
紫書 第3章陣列和字串(例題) 例題3-1 TEX Quotes 例題3-2 WERTYU 例題3-3 Palindromes 例題3-4 Master-Mind Hints 例題3-5 Digit Generator 例題3-6 Circular Sequence 紫書
演算法競賽入門經典(第2版)救濟金髮放(The Dole Queue,UVa133)
演算法競賽入門經典(第2版)救濟金髮放(The Dole Queue,UVa133 import java.util.Scanner; /** * @author Joker */ publ
演算法競賽入門經典:習題2-6排列
嘛...題目就是1-9,九個數字,每個數字只能用一次,組成三個三位數,要求三個數的比為1:2:3。 暴力迴圈直接就可以過的~ PS:書上提示說這個題不用太動腦
演算法競賽入門經典(第2版)習題4-3 黑白棋 Othello UVa220
這題邏輯和習題4-1象棋很相似,沒什麼特別的。 第一次提交報wa,添加了若干樣例測試,發現邏輯無誤。 與樣例輸出對拍後發現輸出尾部多了一個換行符,修改後ac。 //#define LOCAL //#define TESTING #include<stdio.h>
演算法競賽入門經典(第2版)習題3-4 週期串 Periodic Strings UVa445
這題把我虐哭了。 提交了13次才ac。 演算法本身沒什麼好說的,UVa上html版和pdf版的輸入輸出格式要求不一樣,以html版為準。 而且html版的輸入輸出格式都有點奇葩,不認真看原文細節是ac不了的。 參考了他的例程,我才找到問題的解決辦法。 UVa評測系統中的空
演算法競賽入門經典(第2版)習題4-5 IP網路 IP Networks UVa1590
這道題的邏輯很簡單,讀入所有的ip地址,確認總共32位二進位制數中最左一個不同是在哪裡出現的,然後按規則輸出網路地址與子網掩碼即可。 可上傳後我發現它就是wa...還是wa...總是wa...... 然後我在網上找到了例程,設想出了很多測試資料,用fc拍來拍去,總是報告“找
【演算法競賽入門經典】【第一章】課後習題
今天心血來潮,決定將《演算法競賽入門經典》裡面的課後題,進行詳解,先來第一發。 習題1-1 平均數(average) 對於第一題,相信即便是第一次接觸程式設計的人。只要稍稍瞭解一下C的語法,也可輕易解決這一題。所以我也不多說了直接上程式碼。 #include
演算法競賽入門經典(第2版)習題3-5 謎題(Puzzle) Uva227
C++編寫 #include<iostream> using namespace std; int main() { int x = 2, y = 1; char Pu
演算法競賽入門經典(第2版)習題4-5 IP網路UVa1590
#include <stdio.h> #include <string.h> int twoip[1005][35]; void changetwo(int num, int i, int j) { int q, chu = num; //printf("%d %d %d\n",
UVa220 演算法競賽入門經典(第2版)習題4-3 黑白棋 Othello
老規則 題目解釋看他們的 程式碼看我的。。 可能我的程式碼略微濃縮一些。 。。 。。我找了半天,,程式碼寫的都好長。,要是看懂了題目的話 就看我的程式碼吧。 http://blog.csdn.net/kyoma/article/details/51
演算法競賽入門經典:習題3-8 手機鍵盤(keyboard)
輸入一個由小寫字母組成的英文單詞,輸出用手機的預設英文輸入法的敲鍵序列。例如要打出pig這個單詞,需要按1次p,3次i,(稍作停頓後)1次g,記為p1i3g1。 #include<stdio.h> #include<string.h> #define
第八節課:第六章儲存結構與磁碟劃分
筆記 (借鑑請修改) 6.3、檔案系統與資料資料 目前linux最常見的檔案系統: ext3:日誌檔案系統。宕機時可自動恢復資料資料,容量越大恢復時間越長,且不能保證百分百不
解析幾何:第六章 二次曲面(1)球面 橢球面 雙曲面
§1.球面 1.球面方程,球心與半徑 圖形 方程 球心和半徑 1° 標準方程: x²+y²+z²=R² 2° 引數方程 (φ為經度,θ為緯度) 3° 球面座標方程 r=R 球心:G(0,0,0) 半徑:R 1° (x-a)²+(y-b)²
演算法競賽入門經典第六章例題6-1 Concurrency Simulator UVA
#include<iostream> #include<string> #include<deque> #include<vector> #inclu
演算法競賽入門經典(第二版)第三章陣列和字串習題3-4週期串
如果一個字串可以由某個長度為k的字串重複多次得到,則稱該串以k為週期。例如abcabcabc以3為週期(注意,它也以6和12為週期)。輸入一個長度不超過80的字串,輸出其最小週期 #include<stdio.h> int main() { char a[100];
演算法競賽入門經典(第二版)第三章陣列和字串習題3-3數數字
把前n(n<=10000)個整數順次解除安裝一起:123456789101112…數一數0~9各出現多少次(輸出10個整數,分別是0,1,…,9出現的次數) #include<stdio.h> #define N 100000 char s[N],temp[10]; i