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

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

新規登録して質問してみよう
ただいま回答率
85.46%
アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

C++

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

Q&A

解決済

2回答

1686閲覧

お絵かきロジックの作成(5×5ヒントつき)

Natumeru

総合スコア5

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

C++

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

0グッド

0クリップ

投稿2020/08/05 14:03

お絵かきロジックをアルゴリズムの課題で作っているのですが、出したいイラストは出せたのですがヒント部分がどうしたらいいのか分かりません。とりあえず下記のようなプログラムを作成しました。これだとヒント部分が出ないのです。

C言語

試したいこと

  • お絵かきロジックの完成図を表示する
  • 図形は配列の初期値として定義
  • 何マス塗られているのかヒントで出す

試したこと

#include<stdio.h> int main( void ) { int i, j; int a[ 8 ][ 8 ] ; int cnt = 0; for( i = 0; i < 8; i++ ) { for( j = 0; j < 8; j++ ) a[ i ][ j ] = 0; } for( j =3; j < 8; j++ ) { a[ 7 ][ j ] = 1; } a[ 3 ][ 4 ] = 1; a[ 3 ][ 5 ] = 1; a[ 3 ][ 6 ] = 1; a[ 4 ][ 3 ] = 1; a[ 4 ][ 7 ] = 1; a[ 5 ][ 5 ] = 1; a[ 5 ][ 6 ] = 1; a[ 6 ][ 4 ] = 1; for( i = 0; i < 8; i++ ) { for( j = 0; j < 8; j++ ) if( a[ i ][ j ] == 1 ){ printf( "¡" ); }else { printf( " " ); } if(j==8 ) putchar( '\n' ); } return 0; }
  • (実行した)実行結果

□ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □
□ □ □ □ ■ ■ ■ □
□ □ □ ■ □ □ □ ■
□ □ □ □ □ ■ ■ □
□ □ □ □ ■ □ □ □
□ □ □ ■ ■ ■ ■ ■

  • (実現したい)表示結果

□ □ □ □ □ 1 1 □
□ □ □ 1 1 1 1 1
□ □ □ 1 2 1 1 1
□ □ 3 □ ■ ■ ■ □
□ 1 1 ■ □ □ □ ■
□ □ 2 □ □ ■ ■ □
□ □ 1 □ ■ □ □ □
□ □ 5 ■ ■ ■ ■ ■

※空白部分は"□"で記入してます

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

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

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

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

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

guest

回答2

0

ベストアンサー

たぶん、質問文の最初に「C言語」ってあるから、タグが間違いでC言語だと思います。

C

1#include <stdio.h> 2 3#define CELL_START 3 4#define CELL_END 8 5int main(void) 6{ 7 int a[8][8]; 8 9 for (int y = 0; y < CELL_END; y++) { 10 for (int x = 0; x < CELL_END; x++) { 11 a[y][x] = 0; 12 } 13 } 14 15 for (int x = CELL_START; x < CELL_END; x++) { 16 a[7][x] = 1; 17 } 18 19 a[3][4] = 1; 20 a[3][5] = 1; 21 a[3][6] = 1; 22 a[4][3] = 1; 23 a[4][7] = 1; 24 a[5][5] = 1; 25 a[5][6] = 1; 26 a[6][4] = 1; 27 28 for (int y = CELL_START; y < CELL_END; y++) { 29 int cnt = 0; 30 for (int x = CELL_START; x < CELL_END; x++) { 31 if (a[y][x] == 1) { 32 cnt++; 33 } else if (cnt > 0) { 34 for (int x2 = 0; x2 < CELL_START; x2++) { 35 if (a[y][x2] == 0) { 36 a[y][x2] = cnt; 37 cnt = 0; 38 break; 39 } 40 } 41 } 42 } 43 if (cnt > 0) { 44 for (int x2 = 0; x2 < CELL_START; x2++) { 45 if (a[y][x2] == 0) { 46 a[y][x2] = cnt; 47 cnt = 0; 48 break; 49 } 50 } 51 } 52 } 53 54 for (int x = CELL_START; x < CELL_END; x++) { 55 int cnt = 0; 56 for (int y = CELL_START; y < CELL_END; y++) { 57 if (a[y][x] == 1) { 58 cnt++; 59 } else if (cnt > 0) { 60 for (int y2 = 0; y2 < CELL_START; y2++) { 61 if (a[y2][x] == 0) { 62 a[y2][x] = cnt; 63 cnt = 0; 64 break; 65 } 66 } 67 } 68 } 69 if (cnt > 0) { 70 for (int y2 = 0; y2 < CELL_START; y2++) { 71 if (a[y2][x] == 0) { 72 a[y2][x] = cnt; 73 cnt = 0; 74 break; 75 } 76 } 77 } 78 } 79 80 for (int y = CELL_START; y < CELL_END; y++) { 81 while (a[y][CELL_START - 1] == 0) { 82 for (int x = CELL_START - 2; x >= 0; x--) { 83 a[y][x + 1] = a[y][x]; 84 } 85 a[y][0] = 0; 86 } 87 } 88 89 for (int x = CELL_START; x < CELL_END; x++) { 90 while (a[CELL_START - 1][x] == 0) { 91 for (int y = CELL_START - 2; y >= 0; y--) { 92 a[y + 1][x] = a[y][x]; 93 } 94 a[0][x] = 0; 95 } 96 } 97 98 for (int y = 0; y < CELL_END; y++) { 99 for (int x = 0; x < CELL_END; x++) { 100 if (y < CELL_START || x < CELL_START) { 101 if (a[y][x] > 0) { 102 printf(" %d", a[y][x]); 103 } else { 104 printf(" "); 105 } 106 continue; 107 } 108 109 if (a[y][x] == 1) { 110 printf(" O"); 111 } else { 112 printf(" "); 113 } 114 } 115 putchar('\n'); 116 } 117 118 return 0; 119}

terminal

1$ ilogic 2 1 1 3 1 1 1 1 1 4 1 2 1 1 1 5 3 O O O 6 1 1 O O 7 2 O O 8 1 O 9 5 O O O O O

投稿2020/08/05 15:31

編集2020/08/05 15:57
Daregada

総合スコア11990

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

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

Natumeru

2020/08/05 15:38

あぁ、失礼しました。不慣れな点がありますのでタグを入れ間違えたかもしれないですね
Daregada

2020/08/05 15:58 編集

いかん。ヒントが逆順になっている。修正しました。
Natumeru

2020/08/05 16:20

ご丁寧にありがとうございます。何とか解くことができました、本当にありがとうございました。
guest

0

ざくざくっと書いてみた:

C++

1#include <iostream> 2#include <vector> 3#include <initializer_list> 4 5std::vector<int> hint(std::vector<int> input) { 6 using namespace std; 7 vector<int> out; 8 9 input.push_back(0); 10 int n; 11 bool prev; 12 bool cur = false; 13 for ( int t : input ) { 14 prev = cur; 15 cur = t == 1; 16 if ( !prev && !cur ) { n = 0; } // 0 -> 0 17 if ( prev && !cur ) { out.push_back(n); n = 0; } // 1 -> 0 18 if ( !prev && cur ) { n = 1; } // 0 -> 1 19 if ( prev && cur ) { ++n; } // 1 -> 1 20 } 21 return out; 22} 23 24int main() { 25 // パターン: 0 1 1 0 1 に対し、そのヒント: 2 1 を求める 26 for ( int num : hint({ 0, 1, 1, 0, 1 }) ) { 27 std::cout << num << ' '; 28 } 29 std::cout << std::endl; 30}

投稿2020/08/05 15:02

episteme

総合スコア16614

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

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

Natumeru

2020/08/05 15:27

回答ありがとうございます!試してみます ちなみになんですが、他の図柄(5×5以外)でも応用できるのでしょうか?少し気になったので。
episteme

2020/08/05 15:30

訊くまでもないでしょう。やってみりゃわかること。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問