#15のKG(コンソール)
さて、ついにvol2になりましたね〜
#15はですね・・・簡単です!
まず、図書室から答えを計算する部分を持ってきます。
9文字目と10文字目の文字コードの値を足して5を掛け 論理積0x4fをしたものが15文字目の文字コードと同じだと次へ、 まちがいだとチェックルーチン終了して待機状態になります。 7文字目と8文字目の文字コードの値を足して4を掛け 論理積0x4fをしたものが14文字目の文字コードと同じだと次へ、 まちがいだとチェックルーチン終了して待機状態になります。 5文字目と6文字目の文字コードの値を足して3を掛け 論理積0x4fをしたものが13文字目の文字コードと同じだと次へ、 まちがいだとチェックルーチン終了して待機状態になります。 3文字目と4文字目の文字コードの値を足して2を掛け 論理積0x4fをしたものが12文字目の文字コードと同じだと次へ、 まちがいだとチェックルーチン終了して待機状態になります。 1文字目と2文字目の文字コードの値を足して1を掛け 論理積0x4fをしたものが11文字目の文字コードと同じだと次へ、 まちがいだとチェックルーチン終了して待機状態になります。
この部分ですね。
じゃぁ、全部で15文字だから
char
pas[15];
これでいいとして、計算部分は
int
i;
for(i=0;i<5;i++)
pas[10+i] = ((pas[i*2]
+ pas[i*2+1])*(i+1))&0x4f;
たったこれだけ。。
あとは
printf("%s",pas);
で表示して終わり。と、言いたいところですが、パスを取得するのはどうするか・・・
そこが一番の問題ですね
一例ソースとして挙げておきます
#include <stdio.h> #include <stdlib.h> //rand()とsrand()を使う #include <time.h> //time()を使う #include <conio.h> int main() { char pas[15]; //パス用の変数 int i; //ループ用 srand((unsigned)time(NULL)); //rand()はそのままだと常に同じ動きをするので、時間を使う for(i=0;i<5;i++){ pas[i*2] = rand()%41 + 0x21; //まず基本となる文字を一つ決める do{ //doで最低一回実行させる pas[i*2+1] = rand()%61 + 0x41; //基本の隣の文字を決める pas[10+i] = ((pas[i*2] + pas[i*2+1])*(i+1))&0x4f; //計算して入る場所に入れる }while(pas[10+i]<20); //結果が0x20(スペース含む)以下だと不具合が出るので //もう一度基本の隣からやり直させる。 } printf("%s",pas); //表示 getch(); return 0; }
さて、私の場合のパスの取得はこうでしたが、別のやり方も沢山あります。
例えば、大文字と数字だけにするなど見やすさを優先してもイイかもしれません。
解らないこと、説明不足は、じゃんじゃんいって下さいね〜
と、ここらへんで#15の講座は終わります。