蒜頭君的魔法機

2021-10-16 22:32:06 字數 1250 閱讀 6803

蒜頭君有一台神奇的魔法機,它能將輸入的序列進行一系列複雜的變換,輸出原序列的另一種排列方式。蒜頭君十分好奇魔法機的工作原理,終於有一天他嘗試著把魔法機拆開研究了。

通過一系列複雜的演算,蒜頭君終於發現了魔法機的工作原理:其實魔法機就是乙個棧,根據棧先進後出的性質,每次乙個數字進棧或將棧頂元素彈出,由此可以產生不同的出棧序列,出棧序列就是原序列的另一種排列了。

在研究完原理後,蒜頭君憑藉記憶很快就把魔法機組裝好了。現在蒜頭君想測試下魔法機在組裝完成後是否出現問題。

首先他將 1 到 n 這 n 個數字依次輸入魔法機裡,然後隨機寫下一組序列a,現在他想知道能否通過魔法機得到序列a,聰明的你能幫蒜頭君算一算嗎?

輸入格式

輸入有兩行,第一行是乙個正整數 n(1≤n≤100),表示輸入魔法機序列的長度,第二行是序列a,共有 n 個整數,表示要得到的目標序列。

序列為 1 到 n 的排列,即序列a長度為 n,保證序列中的整數都不相同,且整數在區間 [1, n] 內。

輸出格式

輸出一行,如果能通過魔法機得到序列a,則輸出yes,否則輸出no。

#include #define error 0

#define ok 1

typedef struct stackstack;

void init(stack *s, int length)

int push(stack *s, int element)

s->top_index++;

s->elements[s->top_index] = element;

return ok;

}int pop(stack *s)

s->top_index--;

return ok;

}int top(stack *s)

int empty(stack *s)

void clear(stack *s)

int main()

while (top(stack) < m)

if (flag == 0 && i == n + 1)

if (!empty(stack) && top(stack) == m)

if (flag && empty(stack))

}if (!empty(stack)) printf("no\n");

else printf("yes\n");

clear(stack);

return 0;

}

蒜頭君面試

題目 問題描述 蒜頭君來蒜廠面試的時候,曾經遇到這樣乙個面試題 給定 n 個整數,求裡面出現次數最多的數,如果有多個重複出現的數,求出值最大的乙個。當時可算是給蒜頭君難住了。現在蒜頭君來考考你。輸入格式 第一行輸入乙個整數n 1 n 100000 接下來一行輸入n個 int 範圍內的整數。輸出格式 ...

蒜頭君下棋

蒜頭君下棋 共一行,兩個整數nn和mm 1 leq n m leq 10001 n,m 1000 代表棋盤一共有 nn 行 mm 列。輸出乙個整數,代表棋盤上最多能放的馬的數量。樣例輸入1複製 2 4樣例輸出1複製 4樣例輸入2複製 3 4樣例輸出2複製 6 1 當棋盤只有一行時,棋盤上全放上棋子即...

蒜頭君闖關

題目 如下 includeusing namespace std long long a 1005 dp 1005 int main ans max ans,dp i cout ans endl return 0 這道題是求上公升序列最大和,dp i 代表前i關最大難度和,每次求dp i 的值,首先...