質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

1回答

415閲覧

マスターマインドで先頭の一文字目をヒントとして教えるプログラムを教えてほしいです。

s161016

総合スコア0

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2022/05/28 10:33

マスターマインドで先頭の一文字目をヒントとして教えるプログラムを入れたいのですが、どこにどのように入れればよいのかわかりません。教えていただければ幸いです。
#include <time.h>
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void make4digits(int x[])
{
int i, j, val;

for (i = 0; i < 4; i++) { do { val = rand() % 10; for (j = 0; j < i; j++) if (val == x[j]) break; } while (j < i); x[i] = val; }

}

int check(const char s[])
{
int i, j;

if (strlen(s) != 4) return 1; for (i = 0; i < 4; i++) { if (!isdigit(s[i])) return 2; for (j = 0; j < i; j++) if (s[i] == s[j]) return 3; } return 0;

}

void judge(const char s[], const int no[], int *hit, int *blow)
{
int i, j;

*hit = *blow = 0; for (i = 0; i < 4; i++) { for (j = 0; j < 4; j++) { if (s[i] == '0' + no[j]) if (i == j) (*hit)++; else (*blow)++; } }

}

void print_result(int snum, int spos)
{
if (spos == 4)
printf("正解です!!");
else if (snum == 0)
printf("それらの数字はまったく含まれません。\n");
else {
printf("それらの数字中%d個の数字が含まれます。\n", snum);

if (spos == 0) printf("ただし位置もあっている数字はありません。\n"); else printf("その中の%d個は位置もあっています。\n", spos); } putchar('\n');

}

int main(void)
{
int try_no = 0;
int chk;
int hit;
int blow;
int no[4];
char buff[10];
clock_t start, end;

srand(time(NULL)); puts("■ マスターマインドをしましょう。"); puts("■ 四つの数字の並びを当ててください。"); puts("■ 同じ数字が複数含まれることはありません。"); puts("■ 4307のように連続して入力してください。"); puts("■ スペース文字などを入力してはいけません。\n"); make4digits(no); start = clock(); do { do { printf("入力してください:"); scanf("%s", buff); chk = check(buff); switch (chk) { case 1: puts("\aきちんと4文字で入力してください。"); break; case 2: puts("\a数字以外の文字を入力しないでください。"); break; case 3: puts("\a同一の数字を複数入力しないでください。"); break; } } while (chk != 0); try_no++; judge(buff, no, &hit, &blow); print_result(hit + blow, hit); } while (hit < 4); end = clock(); printf("%d回かかりました。\n所要時間は%.1f秒でした。\n", try_no, (double)(end - start) / CLOCKS_PER_SEC); return 0;

}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2022/05/28 11:10

このままではコードが読みづらいので、質問を編集し、</>(コードの挿入)ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
guest

回答1

0

質問のポイントがわかりませんが、文字通りの意味だとして回答すると、
ヒントを出したいタイミングでprintfを書けば良いだけでは?

投稿2022/05/28 10:43

otn

総合スコア84557

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問