遇到一位女神,想著憑自己的顏值可以捕捉芳心,於是便主動去找女神要QQ號,沒想到顏值攻略失敗,女神給我出了道題,看來真是程式設計師之間的一場較量啊,題目如下:
女神給了一串數字(不是QQ號碼),根據下面規則可以找出QQ號碼:先刪除第一個數,緊接著將第二個數放到這串數字的結尾,再將第三個數刪除,並將第四個數放到這串數字的末尾……如此循環,知道剩下最後一個數,將最後一個數也刪除,按照剛才刪除的順序,把這些數字連在一起就是女神的QQ號碼啦。
就是這樣,女神給了一串數字631758924,現在要做的就是從這個數字中找出女神的QQ號碼了,方法有很多種,比如說用9張卡片分別寫上這9個數字,模擬題目的過程,可以算出來,也可以用筆一個一個的去算~~~~
這些方法都太low了,顯示不出程式設計師的能力,還是寫個程式比較酷一點(其實我是在想,要是下次再遇到一個女神出這樣的題目,程式就很方便了,哈哈~~~)
#解決方法
第一種方法,採用數學的方法,根據題目的規律,循環下面的操作:取整=>取餘=>取餘*10+取整。 。 。 。 。取餘取整的物件都是10的倍數,依位數而定,每次取整之後就是一位,循環直到數字等於0。
$raw_num = 631758924;
$num = 0;
#$devisor = 1;
1 ($devisor
{
$devisor *= 10; //取得最小的大於raw_num的10的倍數的整數
#''
while ($raw_num > 0) { $devisor /= 10; $next = floor($raw_num / $devisor);取得下一個數字 $num = $num*10 + $next; //10 + $next; //計算中對半成品中「QQ號碼o_#$" $ $last = floor($raw_num * 10 / $devisor); //移動數字,拼接最新的QQ號碼
$pre = $raw_num % (ceil($devisor # $pre = $raw_num % (ceil($devisor / 10) );
$raw_num = $pre * 10 + $last; $num}"; //恭喜你啦,成功取得QQ號碼:615947283
利用佇列的FIFO取得QQ號碼,根據題目的特性,剛好可以使用佇列來處理,佇列簡單方便,而且更好理解。
#include
struct queue {
int *data;
int head;
#
};
int main()
#{
int num, i;
printf("請輸出要破解的QQ 號碼長度:");
scanf("%d", &num);
struct queue q;
int *)malloc(sizeof(int)*(num*2-1)); //總共需要的陣列長度為num*2-1
q.head = 0;
# q.tail = 0; 卷, &q.data[q.tail]); q.tail++;}
號碼:");
while(q.head
{
);
q.head++;
q.data[q. tail++;
q.head++;
}
# return 0 一實驗
請輸出要破解的QQ號碼長度:9
#請輸出要破解的QQ號碼長度:9
6
3
1
7
#5
8
9
2
4
恭喜你啦,成功取得QQ號碼:615947283請按任何鍵繼續. . .
QQ號碼到手,還展現了一手好本領。這下我在女神心中地位是不是又有大大的提升。
怎麼樣,這種方法大家學到了嗎?