ホームページ >見出し >プログラマーはどのようにして難しい問題を解決し、女神の QQ アカウントを取得するのでしょうか?

プログラマーはどのようにして難しい問題を解決し、女神の QQ アカウントを取得するのでしょうか?

小云云
小云云オリジナル
2017-11-07 11:50:252346ブラウズ

女神と出会い、自分の容姿で彼女の心を掴めると思い、思い切って女神にQQアカウントをお願いしたところ、思いがけず女神から質問が来たようです。実際はプログラマ同士のコンテストで、テーマは次のとおりです:
女神は一連の数字 (QQ 番号ではありません) を与えました。QQ 番号は次のルールに従って見つけることができます。最初に最初の数字を削除し、次に、この数字列の最後に 2 番目の数字を追加し、3 番目の数字を削除し、数字列の最後に 4 番目の数字を追加します...このループでは、最後の数字が残るまで、最後の番号、そして今削除された順序に従うこれらの番号を合わせて女神の QQ 番号です。

プログラマーはどのようにして難しい問題を解決し、女神の QQ アカウントを取得するのでしょうか?

以上、女神は 631758924 という数字の列を与えました。私たちが今しなければならないことは、この数字から女神の QQ 番号を見つけることです。たとえば、この 9 つを書くために 9 枚のカードを使用するなど、さまざまな方法があります。それぞれの数値を計算して問題のプロセスをシミュレートすることも、ペンを使用してそれらを 1 つずつ計算することもできます~~~~

これらの方法は低すぎて、プログラマーの能力を示しません。プログラムを書く(実は、今度女神にそんな質問をされたら、とても便利なプログラムになるだろうと思っていました、笑~~~)

解決策

最初の方法は、数学的手法を使用することです。質問のルールに従って、次の操作をループします: Rounding =>Remainder=>Remainder*10+Rounding。 。 。 。 。剰余丸めの対象はすべて 10 の倍数であり、各丸めの桁数に応じて 1 桁になり、数値が 0 になるまでループが継続されます。

$raw_num = 631758924;

$devisor = 1;

while($devisor

$devisor *= 10; / /raw_num の 10 の倍数である最小の整数を取得します

}

while ($raw_num > 0) {

$devisor /= 10

$next = Floor($raw_num / $devisor) ; // 次の番号を取得します

$num = $num*10 + $next; $devisor) // 番号を移動して最新の QQ 番号を結合します

$pre = $devisor / 10));

$raw_num = $pre * 10 + $last;

}

echo "おめでとうございます、QQ 番号を取得しました: {$num}"; QQ 番号: 615947283

QQ 番号を取得するには、キューを使用するのがシンプルで便利で理解しやすいです。

#include

struct queue {

int *data;

int テール;

{

int数字、私。

printf("解読するQQ番号の長さを入力してください:");

scanf("%d", &num);

struct queue q; malloc(sizeof (int)*(num*2-1)); //必要な配列の合計長は num*2-1 です

q.tail = 0; (i= 1;i

{

scanf("%d", &q.data[q.tail]);

q.tail++ }

Printf("おめでとうございます。QQ 番号の取得に成功しました: ");

while (q.head & lt; q.tail) {

Printf ("%d ", q.data [q.head]);

q.head ++;

q.data[q.tail] = q.data[q.head];

q.head++;

;

# 以下は実験です

解読する QQ 番号の長さを入力してください: 9

解読する QQ 番号の長さを入力してください: 9

6

...

QQ番号を取得し、優れたスキルも示しました。これで女神の御心における私のステータスは大きく向上しました。

この方法を学びましたか?

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。