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

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

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

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

アルゴリズム

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

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

C++

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

Q&A

解決済

4回答

1177閲覧

[至急] Project Euler: #11 Largest product in a grid コード、入力、出力、できれば解説もお願いします。アルゴリズムとデータ構造

退会済みユーザー

退会済みユーザー

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

アルゴリズム

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

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

C++

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

0グッド

0クリップ

投稿2022/09/20 19:25

編集2022/09/22 05:51

https://projecteuler.net/problem=11

In the 20×20 grid below, four numbers along a diagonal line have been marked in bold.

08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08
49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00
81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65
52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91
22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80
24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50
32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70
67 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21
24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72
21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95
78 17 53 28 22 75 31 67 15 94 03 80 04 62 16 14 09 53 56 92
16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57
86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58
19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40
04 52 08 83 97 35 99 16 07 97 57 32 16 26 26 79 33 27 98 66
88 36 68 87 57 62 20 72 03 46 33 67 46 55 12 32 63 93 53 69
04 42 16 73 38 25 39 11 24 94 72 18 08 46 29 32 40 62 76 36
20 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 04 36 16
20 73 35 29 78 31 90 01 74 31 49 71 48 86 81 16 23 57 05 54
01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48

The product of these numbers is 26 × 63 × 78 × 14 = 1788696.

What is the greatest product of four adjacent numbers in the same direction (up, down, left, right, or diagonally) in the 20×20 grid?

結論からお伝えすると、答えを教えてください。C,C++,javaのどれかで。
コードと入力と出力とできれば解説もお願いします。
プログラミング未経験でも簡単に理解できるように説明してほしい。

私の考え
Segmentation fault (core dumped)と表示された。
Segmentation fault (core dumped)と表示される前に途中経過の出力をflushしたら、66929544と表示された行があった。

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

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

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

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

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

thkana

2022/09/20 22:13

本題に関係ないけれど、あなたがわざわざ質問タイトルに書いているので伺いますけれど、 なぜ[至急]なのですか?
episteme

2022/09/21 00:40

> Segmentation fault (core dumped)と表示された。 > Segmentation fault (core dumped)と表示される前に途中経過の出力をflushしたら、66929544と表示された行があった。 これは"考え"ではない。
m.ts10806

2022/09/21 01:14 編集

数時間放置でいい至急ってなんなんですかね。 「至急」ってどういう意味なんですかね。たぶん私が知ってるのとは違う意味で使われてるようですけど、 自分しか分からない表現使うのやめてもらえます?赤の他人しかいないんだから。 解決したいなら最低限のルールを守りましょう。 https://teratail.com/help 「読む」だけじゃなく、「理解」して、「実践」しましょう。 それくらいなら一般人にもできます。
退会済みユーザー

退会済みユーザー

2022/09/21 04:37

それってあなたの感想ですよね
m.ts10806

2022/09/21 04:39

まともに会話できるようになってからまたおいで。
退会済みユーザー

退会済みユーザー

2022/09/21 04:40

煽り厨か? まともな会話ができないのはどっちだよ
退会済みユーザー

退会済みユーザー

2022/09/21 04:40

とにかく答えと解説がほしい。一刻も早くProject Eulerを全問正解して、履歴書に書きたい。
m.ts10806

2022/09/21 04:42

平気で大嘘を履歴書に書く人がまともに会話できるとは思えないが。 年収1000万はおろか100万すら無理だよ。まともにできる仕事がない。
退会済みユーザー

退会済みユーザー

2022/09/21 04:42

いい加減にしろ 全問正解がいかに価値があることかお分かりでないか
m.ts10806

2022/09/21 04:48

全問正解には価値があっても、自分の実力で解いてないなら単なるカンニング。 実力を証明することにはならないので大嘘。 すぐバレる。
退会済みユーザー

退会済みユーザー

2022/09/21 04:49

嘘つきはお前か? 少なくとも大多数は私自身で解いたことに変わりはない。
退会済みユーザー

退会済みユーザー

2022/09/21 04:51

こうやって頑張ってる人を蹴落とすのがよぼど楽しく感じちゃうんだね。かわいそうに
m.ts10806

2022/09/21 04:53

>少なくとも大多数は私自身で解いたことに変わりはない。 何個も丸投げてる時点でそれを信じる人いないんじゃないかな。 本当に大多数解けるなら「答えを教えてくれ」「解説も欲しい」なんて投げ方にならんでしょ。 回答ついても理解してる様子ないし、毎回投げ方が馬鹿の一つ覚え。 工夫ゼロの丸投げしかできない人の何を信じろと。
m.ts10806

2022/09/21 04:54

>こうやって頑張ってる人 頑張ってるように見えるならちゃんとアドバイスします。 頑張ってないからそこを「指摘」されてるだけ。 それで「蹴落とす」という表現を使ってる時点で這い上がるのは無理と分かる。
退会済みユーザー

退会済みユーザー

2022/09/21 04:55

#12は自力で解いてみせる。
退会済みユーザー

退会済みユーザー

2022/09/21 04:56

本当に大事なのは最終的に解けたかどうかより、自分の頭で思考したかどうかだ
m.ts10806

2022/09/21 04:57

現在公開されているアーカイブ798問 1個だけ自力で解いたつもりになって「大半」と大風呂敷。 ということになりますが、よろしいですかね。 「大半」なら95%くらいは余裕で解けないと意味がないんでは。 履歴書にも書けませんね。(書いて通じるかというのは別問題だし、面接ですぐバレる)
m.ts10806

2022/09/21 04:58

>自分の頭で思考したかどうかだ アウトプットの連続であるエンジニアにはおおよそ向かない考えなので、 どうぞ別のインプットだらけのお仕事を探してください。
退会済みユーザー

退会済みユーザー

2022/09/21 04:59

中級者など、お前よりレベルが低い人を批判している暇あるなら自分のスキル磨いたら? 古参だからって限度っちゅうものがあるだろ
m.ts10806

2022/09/21 05:03

自分のことは自分のことできちんとやってるのでご心配には及びません。 私は2017年から使ってるので、2014年に始まったサービスからすると「古参」とは言えないのでは。 指摘されたくないのなら、指摘されない投稿をすればいいだけだと思います。 https://teratail.com/users/kisaragiST?feed=question 誰の指摘も聞かず、愚痴を繰り返す。これでは誰でも指摘します。 まぁやり口から近いうちに運営に処理されそうなのは明白なのでこれくらいにはしておきますが。
退会済みユーザー

退会済みユーザー

2022/09/21 05:04

コンパイルできたんで文句はもう終わりにしてくれんかな
m.ts10806

2022/09/21 05:05

はい。規約違反と思われる行為を指摘されても繰り返しているとして、運営に対処を依頼したので。
退会済みユーザー

退会済みユーザー

2022/09/21 05:07

f2-3orknijfe0kwomo0re-plwmkorplfmwusdi9fo0plkjuwie9ofueri9o0lthokiopf;kbop;lgkroorekgjiorflkfgp;.g;@:er/g;epg@;elrkibfopokbu8v9iuw7238u4e78rtju7er8i392ei4OKorkefoerke0ge9i9i0ori8ufie9irfikgoekokofkdokfofkokokfeofkokkookfeokkodokseokdjiife8u888f8fddf8uu8ss8u8du88uu8u8uu8u8u8u8uyt6r55t6ifrfef
退会済みユーザー

退会済みユーザー

2022/09/21 06:35

さようなら
guest

回答4

0

ベストアンサー

力ずくですが、epistemeさんのアドバイスに従い、

「右上/右/右下/下 の4方向に向かって4つの数の積を取り、最大値を求める」を各マスで行う。(範囲外のマスの値は0とすればよい)

を実装してみました。
データは"data.txt"から読み込んでいます。予め、data.txtに20×20個のデータを設定しておいてください。
不明点があれば補足してください。

C

1//https://projecteuler.net/problem=11 2#include <stdio.h> 3#define MAX (20) 4//行をy座標とし、1行~20行をy=0~19で表現する 5//行をy座標とし、1列~20列をx=0~19で表現する 6int arr[MAX][MAX]; //読み込んだ値の配列 7int maxmulv = -1; //積の最大値 8int maxval[4]; //積の最大値になった時の値 9int maxposy[4]; //積の最大値になった時のy座標 10int maxposx[4]; //積の最大値になった時のx座標 11void hantei(int start_y,int start_x,int delta_y,int delta_x); 12int main (void){ 13 FILE *fp; 14 int x,y; 15 int i; 16 fp = fopen("data.txt","r"); 17 if (fp == NULL){ 18 printf("fopen error"); 19 return 10; 20 } 21 //データ読み込み 22 for (y = 0; y < MAX;y++){ 23 for (x = 0; x < MAX; x++){ 24 fscanf(fp,"%d",&arr[y][x]); 25 } 26 } 27 fclose(fp); 28 //読み込んだデータの確認 29 for (y = 0; y < MAX;y++){ 30 for (x = 0; x < MAX; x++){ 31 printf("%02d ",arr[y][x]); 32 } 33 printf("\n"); 34 } 35 //右へチェックを1~20行繰り返す 36 for (y = 0; y < MAX;y++){ 37 hantei(y,0,0,1); 38 } 39 //下へチェックを1~20列繰り返す 40 for (x = 0; x < MAX;x++){ 41 hantei(0,x,1,0); 42 } 43 //右下へチェックを1~20行繰り返す 44 for (y = 0; y < MAX;y++){ 45 hantei(y,0,1,1); 46 } 47 //右下へチェックを2~20列繰り返す 48 for (x = 1; x < MAX;x++){ 49 hantei(0,x,1,1); 50 } 51 //右上へチェックを1~20行繰り返す 52 for (y = 0; y < MAX;y++){ 53 hantei(y,0,-1,1); 54 } 55 //右上へチェックを2~20列繰り返す 56 for (x = 1; x < MAX;x++){ 57 hantei(0,x,-1,1); 58 } 59 printf("max=%d\n",maxmulv); 60 for (i = 0;i < 4;i++){ 61 printf("val=%d\n",maxval[i]); 62 printf("maxpos=%d\n",maxposy[i]); 63 printf("maxpos=%d\n",maxposx[i]); 64 } 65 return 0; 66} 67// start_y:yの開始位置 68// start_x:xの開始位置 69// delta_y:yの増分 70// delta_x:xの増分 71void hantei(int start_y,int start_x,int delta_y,int delta_x) 72{ 73 int i,j; 74 int y = start_y; 75 int x = start_x; 76 int val[MAX]; //値 77 int posy[MAX]; //値のy座標 78 int posx[MAX]; //値のx座標 79 int v; 80 //開始位置から20個分の値と座標を取得する 81 for(i = 0;i < MAX;i++){ 82 if (y >= 0 && y < MAX && x >= 0 && x < MAX){ 83 //範囲内なら、その値、座標を設定 84 val[i] = arr[y][x]; 85 posy[i] = y; 86 posx[i] = x; 87 }else{ 88 //範囲外なら0を設定 89 val[i] = 0; 90 posy[i] = -1; 91 posx[i] = -1; 92 } 93 //次の位置へ進める 94 y += delta_y; 95 x += delta_x; 96 } 97 //取得した値の4個の積の取得を0~16まで行う 98 for (i = 0; i <= (MAX-4);i++){ 99 v = val[i] * val[i+1] * val[i+2] * val[i+3]; 100 //積が最大値を超えれば、積、座標を記憶する 101 if (v > maxmulv){ 102 maxmulv = v; 103 for (j=0; j < 4;j++){ 104 maxval[j] = val[i+j]; 105 maxposy[j] = posy[i+j]; 106 maxposx[j] = posx[i+j]; 107 } 108 } 109 } 110} 111

実行結果
08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08
49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00
81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65
52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91
22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80
24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50
32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70
67 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21
24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72
21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95
78 17 53 28 22 75 31 67 15 94 03 80 04 62 16 14 09 53 56 92
16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57
86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58
19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40
04 52 08 83 97 35 99 16 07 97 57 32 16 26 26 79 33 27 98 66
88 36 68 87 57 62 20 72 03 46 33 67 46 55 12 32 63 93 53 69
04 42 16 73 38 25 39 11 24 94 72 18 08 46 29 32 40 62 76 36
20 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 04 36 16
20 73 35 29 78 31 90 01 74 31 49 71 48 86 81 16 23 57 05 54
01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48
max=70600674
val=87
maxpos=15
maxpos=3
val=97
maxpos=14
maxpos=4
val=94
maxpos=13
maxpos=5
val=89
maxpos=12
maxpos=6

投稿2022/09/21 05:01

tatsu99

総合スコア5424

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

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

退会済みユーザー

退会済みユーザー

2022/09/21 05:03

コンパイルできた! ありがとう
guest

0

「右上/右/右下/下 の4方向に向かって4つの数の積を取り、最大値を求める」を各マスで行う。(範囲外のマスの値は0とすればよい)

投稿2022/09/21 00:47

episteme

総合スコア16614

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

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

退会済みユーザー

退会済みユーザー

2022/09/21 04:37

Segmentation fault (core dumped)って何?
episteme

2022/09/21 05:43

多くの場合、与えられた領域を超えてアクセス(読み書き)した時に起こります。
guest

0

残念ながら、ここではコードの作成依頼は受け付けていません

まずはあなたなりにコードを書いてみましょう。その上でわからないことを聞いていただければお答えできるかと思います。

投稿2022/09/20 22:34

y_waiwai

総合スコア87719

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

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

退会済みユーザー

退会済みユーザー

2022/09/21 00:56

点数乞食はやめましょう。回答でないことを回答欄に書くのはやめましょう。
guest

0

全座標を回って計算して最大を求めるだけ。

java

1public class LargestProductInAGrid { 2 static final int SIZE = 20; 3 static final int[][] GRID = { //ファイル読み込みを省略, "04" 等と 0 をアタマにつけると 8 進数になってしまうので頭0は削除 4 { 8, 2,22,97,38,15, 0,40, 0,75, 4, 5, 7,78,52,12,50,77,91, 8}, 5 {49,49,99,40,17,81,18,57,60,87,17,40,98,43,69,48, 4,56,62, 0}, 6 {81,49,31,73,55,79,14,29,93,71,40,67,53,88,30, 3,49,13,36,65}, 7 {52,70,95,23, 4,60,11,42,69,24,68,56, 1,32,56,71,37, 2,36,91}, 8 {22,31,16,71,51,67,63,89,41,92,36,54,22,40,40,28,66,33,13,80}, 9 {24,47,32,60,99, 3,45, 2,44,75,33,53,78,36,84,20,35,17,12,50}, 10 {32,98,81,28,64,23,67,10,26,38,40,67,59,54,70,66,18,38,64,70}, 11 {67,26,20,68, 2,62,12,20,95,63,94,39,63, 8,40,91,66,49,94,21}, 12 {24,55,58, 5,66,73,99,26,97,17,78,78,96,83,14,88,34,89,63,72}, 13 {21,36,23, 9,75, 0,76,44,20,45,35,14, 0,61,33,97,34,31,33,95}, 14 {78,17,53,28,22,75,31,67,15,94, 3,80, 4,62,16,14, 9,53,56,92}, 15 {16,39, 5,42,96,35,31,47,55,58,88,24, 0,17,54,24,36,29,85,57}, 16 {86,56, 0,48,35,71,89, 7, 5,44,44,37,44,60,21,58,51,54,17,58}, 17 {19,80,81,68, 5,94,47,69,28,73,92,13,86,52,17,77, 4,89,55,40}, 18 { 4,52, 8,83,97,35,99,16, 7,97,57,32,16,26,26,79,33,27,98,66}, 19 {88,36,68,87,57,62,20,72, 3,46,33,67,46,55,12,32,63,93,53,69}, 20 { 4,42,16,73,38,25,39,11,24,94,72,18, 8,46,29,32,40,62,76,36}, 21 {20,69,36,41,72,30,23,88,34,62,99,69,82,67,59,85,74, 4,36,16}, 22 {20,73,35,29,78,31,90, 1,74,31,49,71,48,86,81,16,23,57, 5,54}, 23 { 1,70,54,71,83,51,54,69,16,92,33,48,61,43,52, 1,89,19,67,48}, 24 }; 25 enum Dir { 26 RIGHTUP(1,-1), RIGHT(1,0), RIGHTDOWN(1,1), DOWN(0,1); 27 final int dx, dy; 28 Dir(int dx, int dy) { 29 this.dx = dx; 30 this.dy = dy; 31 } 32 } 33 static class PosValue { 34 int x=-1, y=-1; 35 Dir dir; 36 int value; 37 @Override 38 public String toString() { 39 return "x="+x+", y="+y+", dir="+dir+", value="+value; 40 } 41 } 42 public static void main(String[] args) { 43 PosValue max = new PosValue(); 44 for(int x=0; x<SIZE; x++) { 45 for(int y=0; y<SIZE; y++) { 46 largest(x, y, max); 47 } 48 } 49 System.out.println(max); 50 } 51 static void largest(int x, int y, PosValue max) { 52 for(Dir dir : Dir.values()) { 53 int value = 1; 54 for(int i=0, xx=x, yy=y; i<4; i++, xx+=dir.dx, yy+=dir.dy) { 55 if(xx < 0 || xx >= SIZE || yy < 0 || yy >= SIZE) { //GRID 範囲外 56 value = 0; 57 break; 58 } 59 value *= GRID[yy][xx]; 60 } 61 if(max.value < value) { 62 max.x = x; 63 max.y = y; 64 max.dir = dir; 65 max.value = value; 66 } 67 } 68 } 69}

c へ移植

c

1#include <stdio.h> 2#include <string.h> 3 4#define SIZE 20 5 6int GRID[SIZE][SIZE] = { //ファイル読み込みを省略, "04" 等と 0 をアタマにつけると 8 進数になってしまうので頭0は削除 7 { 8, 2,22,97,38,15, 0,40, 0,75, 4, 5, 7,78,52,12,50,77,91, 8}, 8 {49,49,99,40,17,81,18,57,60,87,17,40,98,43,69,48, 4,56,62, 0}, 9 {81,49,31,73,55,79,14,29,93,71,40,67,53,88,30, 3,49,13,36,65}, 10 {52,70,95,23, 4,60,11,42,69,24,68,56, 1,32,56,71,37, 2,36,91}, 11 {22,31,16,71,51,67,63,89,41,92,36,54,22,40,40,28,66,33,13,80}, 12 {24,47,32,60,99, 3,45, 2,44,75,33,53,78,36,84,20,35,17,12,50}, 13 {32,98,81,28,64,23,67,10,26,38,40,67,59,54,70,66,18,38,64,70}, 14 {67,26,20,68, 2,62,12,20,95,63,94,39,63, 8,40,91,66,49,94,21}, 15 {24,55,58, 5,66,73,99,26,97,17,78,78,96,83,14,88,34,89,63,72}, 16 {21,36,23, 9,75, 0,76,44,20,45,35,14, 0,61,33,97,34,31,33,95}, 17 {78,17,53,28,22,75,31,67,15,94, 3,80, 4,62,16,14, 9,53,56,92}, 18 {16,39, 5,42,96,35,31,47,55,58,88,24, 0,17,54,24,36,29,85,57}, 19 {86,56, 0,48,35,71,89, 7, 5,44,44,37,44,60,21,58,51,54,17,58}, 20 {19,80,81,68, 5,94,47,69,28,73,92,13,86,52,17,77, 4,89,55,40}, 21 { 4,52, 8,83,97,35,99,16, 7,97,57,32,16,26,26,79,33,27,98,66}, 22 {88,36,68,87,57,62,20,72, 3,46,33,67,46,55,12,32,63,93,53,69}, 23 { 4,42,16,73,38,25,39,11,24,94,72,18, 8,46,29,32,40,62,76,36}, 24 {20,69,36,41,72,30,23,88,34,62,99,69,82,67,59,85,74, 4,36,16}, 25 {20,73,35,29,78,31,90, 1,74,31,49,71,48,86,81,16,23,57, 5,54}, 26 { 1,70,54,71,83,51,54,69,16,92,33,48,61,43,52, 1,89,19,67,48}, 27}; 28 29typedef struct { 30 char *name; 31 int dx, dy; 32} Dir; 33Dir dirs[] = { 34 {"RIGHTUP",1,-1}, 35 {"RIGHT",1,0}, 36 {"RIGHTDOWN",1,1}, 37 {"DOWN",0,1} 38}; 39 40typedef struct { 41 int x, y; 42 Dir *dir; 43 int value; 44} PosValue; 45 46void largest(int x, int y, PosValue *max) { 47 for(int j=0; j<sizeof(dirs)/sizeof(Dir); j++) { 48 Dir *dir = &dirs[j]; 49 int value = 1; 50 for(int i=0, xx=x, yy=y; i<4; i++, xx+=dir->dx, yy+=dir->dy) { 51 if(xx < 0 || xx >= SIZE || yy < 0 || yy >= SIZE) { //GRID 範囲外 52 value = 0; 53 break; 54 } 55 value *= GRID[yy][xx]; 56 } 57 if(max->value < value) { 58 max->x = x; 59 max->y = y; 60 max->dir = dir; 61 max->value = value; 62 } 63 } 64} 65 66int main(int argc, char *argv[]) { 67 PosValue max; 68 memset(&max, 0, sizeof(PosValue)); 69 for(int x=0; x<SIZE; x++) { 70 for(int y=0; y<SIZE; y++) { 71 largest(x, y, &max); 72 } 73 } 74 printf("x=%d, y=%d, dir=%s, value=%d\n", max.x, max.y, max.dir->name, max.value); 75 return 0; 76}

実行結果

plain

1x=3, y=15, dir=RIGHTUP, value=70600674

投稿2022/09/21 20:07

編集2022/09/21 20:51
jimbe

総合スコア12545

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問