最強大腦
題目描述:
把從n到m車站看到的旗幟顏色依次列出來,然後告訴你小b記得的旗幟顏色序列,判斷小b究竟是從n和m之間哪些方向才能看到所說顏色的旗幟。
可能的結果有:
forward
backward
both
invalid
輸入示例:
atobab
aaacaaa
acaaa
輸出示例:
forward
both
思路:這題實際上是乙個字串匹配,對於第乙個例子,如果a能在atob中找到,那再在atob的a之後去尋找b,如果b也找到了,那麼forward=true。
然後反向尋找,即在bota中找a和b,先找到a,然後再找b,但是在bota的a後面已經沒有東西了,所以backward=false。
對於第二個例子,如果aca能在aaacaaa中找到,那再在aca之後找aa,如果找到了,那麼forward=true
然後反向選擇,即在aaacaaa中尋找aca,然後找aa,也找到了,所以backward = true
由於forward=true and backward= true,所以輸出both
具體的程式也是乙個模擬的過程:
#include
#include
char a[100002];
char b[100002];
char c[100002];
int main()
if (b[j]=='\0') //如果b完全匹配完了,說明可以在a中找到b,flag1=true,繼續在字串a中找字串c
else j = 0;
}flag2 = 0;j = 0;
if (flag1)
if (c[j]=='\0') //如果c完全匹配完了,說明可以在a中找到c,flag2=true
else j = 0;}}
if (flag1&&flag2) forward = 1;//如果flag1=true和flag2=true,說明兩個字串b和c都可以在a中找到,所以forward=true
i = n-1;j = 0; flag1 = 0;//判斷反向的情況
while (i>0)
if (b[j]=='\0') //如果b完全匹配完了,說明可以在a中找到b,flag1=true,繼續在字串a中找字串c
else j = 0;
}flag2 = 0;j = 0;
if (flag1)
if (c[j]=='\0') //如果c完全匹配完了,說明可以在a中找到c,flag2=true,說明forward=true
else j = 0;}}
if (flag1&&flag2) backward = 1; //如果flag1=true和flag2=true,說明兩個字串b和c都可以在a中找到,所以backward=true
if (forward&&backward) printf("both\n");//根據forward和backward的情況,一共有四種輸出
else if (forward) printf("forward\n");
else if (backward) printf("backward\n");
else printf("invalid\n");}}
記憶體管理
有三種對記憶體的操作:
new size:分配size大小的記憶體塊,返回該記憶體塊的控制代碼(即編號
del handle:釋放控制代碼handle指向的記憶體塊
思路:用乙個block陣列記錄已經申請的記憶體的起始位址和長度,開了乙個mem陣列標記已經分配的和沒有分配的記憶體。
new操作的時候,增加block陣列,記錄起始位置和block的長度,然後將mem的對應位置由0改為1.
del操作,將對應的block陣列起始位置置為-1,長度置為0,然後將mem的對應位置由1改為0.
def操作,這個操作我的思路有點不清晰,寫得有點久,
我最開始的想法是把block按照起始位址排序,然後組合起來,但是問題是block的下標是有用的,刪除的時候會用到,所以排序的時候不能交換block的下標。最後使用的方式是掃瞄mem陣列,然後找到第乙個為1的位址,掃瞄這個是第幾個block,然後把這個block前移。
具體**:
#include
#include
struct block;
//記錄每個記憶體塊的起始位址和長度
int main() }
if (!flag) printf("null\n"); //如果記憶體分配失敗,輸出null
}if (strcmp("del",command)==0)
}if (strcmp("def",command)==0) }}
}}
筆試程式設計題彙總 9
0代表黑棋,1代表白棋,找出被白棋包圍的黑棋並吃掉,返回吃掉之後的結果 import sys from copy import deepcopy 4 1101 1011 1001 1111 6101001 110100 111011 010101 111111 010100 41111 0101 1...
筆試程式設計題 2012 3 22筆試
乙個筆試題目 n個人圍成乙個圈,第乙個人從1開始遞增報數,凡是報到3的倍數 包括3 時,該人退出,隨後的人接著再繼續報數,直到最後只剩下乙個人為止,求最後剩下的這個人在原對中的編號。思路 用陣列儲存n個人,開始陣列元素全部初始化為1,表示所有的人都在隊中,然後迴圈遍歷陣列,凡是遇到能整除3的位置的元...
小公尺2015筆試程式設計題
1.程式設計題 懂二進位制 時間限制 1秒 空間限制 32768k 世界上有10種人,一種懂二進位制,一種不懂。那麼你知道兩個int32整數m和n的二進位制表達,有多少個位 bit 不同麼?輸入例子1 1999 2299 輸出例子1 分析 第一步求這兩個數的異或,得到乙個新的數,相同位是0,不同位是...