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

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

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

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Q&A

解決済

2回答

1308閲覧

素数洞穴のコードが動かない

grape_ll

総合スコア83

C

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

0グッド

0クリップ

投稿2020/07/05 13:41

###質問内容
素数洞穴という問題をといていたのですが,実行しても何も入力することも出来ず,表示もされません.ほんとに最初の部分が間違っているということだと思うのですが,自分ではどこが間違っているのかわかりませんでしたので,指摘していただきたいです.

素数洞穴

コード

C

1#include<stdio.h> 2#include<stdlib.h> 3#include<math.h> 4#include<string.h> 5 6#define right 0 7#define down 1 8#define left 2 9#define up 3 10 11 12int Prime(int x){ 13 int i; 14 if(x<2 || x==4) return 0; 15 if(x==2 || x==3 || x==5) return 1; 16 else if((x>5 && ((x-1)%6==0 || ((x+1)%6==0)))){ 17 for(i=3;i<sqrt(x);i++){ 18 if(x%i==0) return 0; 19 } 20 return 1; 21 } 22 return 0; 23} 24 25int Max(int a,int b){ 26 if(a>b) return a; 27 else return b; 28} 29 30typedef struct Cave{ 31 int x,y,scripture; 32}Cave; 33 34 35int main(void){ 36 37 printf("aaaa"); 38 39 int m,n; 40 int value[1001][1001]; 41 int map[1001][1001]; 42 int max; 43 int i=0,j=0,k,l; 44 int lim=1000,direction=0,count=0; 45 int top,last; 46 47 printf("c\n"); 48 49 Cave *cave; 50 51 cave=(Cave *)malloc(sizeof(Cave)*1000001); 52 53 printf("a\n"); 54 55 k=1000000; 56 while(k>0){ 57 if(Prime(k)==1) cave[k].scripture=1; 58 else cave[k].scripture=0; 59 60 if(direction==right){ 61 map[i][j]=k; 62 cave[k].y=i; 63 cave[k].x=j; 64 j++; 65 count++; 66 if(count==lim-1){ 67 direction=down; 68 count=0; 69 } 70 } 71 else if(direction==down){ 72 map[i][j]=k; 73 cave[k].y=i; 74 cave[k].x=j; 75 i++; 76 count++; 77 if(count==lim-1){ 78 direction=left; 79 count=0; 80 } 81 } 82 else if(direction==left){ 83 map[i][j]=k; 84 cave[k].y=i; 85 cave[k].x=j; 86 j--; 87 count++; 88 if(count==lim-1){ 89 direction=up; 90 count=0; 91 } 92 } 93 else if(direction==up){ 94 map[i][j]=k; 95 cave[k].y=i; 96 cave[k].x=j; 97 count++; 98 if(count==lim-1){ 99 direction=right; 100 count=0; 101 lim-=2; 102 j++; 103 k--; 104 continue; 105 } 106 i--; 107 } 108 k--; 109 } 110 111 112 printf("b\n"); 113 114 while(1){ 115 scanf("%d %d",&m,&n); 116 if(m==0 && n==0) break; 117 memset(value,0,sizeof(value)); 118 int l,r,Max_value=0,Max_prime=0,flag=0; 119 int k; 120 121 l=cave[top].x; 122 r=cave[top].x; 123 124 max=cave[top].y; 125 for(k=1;k<=last;k++){ 126 max=Max(max,cave[k].y); 127 } 128 for(i=cave[top].y;i<=max;i++){ 129 for(j=l;j<=r;++j){ 130 if(map[i][j]>last){ 131 direction=down; 132 break; 133 } 134 if(i-1>=0 && j-1>=0){ 135 value[i][j]=Max(value[i][j],value[i-1][j-1]); 136 } 137 if(i-1>=0 && j+1<=999){ 138 value[i][j]=Max(value[i][j],value[i-1][j+1]); 139 } 140 if(i-1>=0){ 141 value[i][j]=Max(value[i][j],value[i-1][j]); 142 } 143 if(cave[map[i][j]].scripture==1){ 144 value[i][j]++; 145 if(value[i][j]>Max_value){ 146 Max_value=value[i][j]; 147 Max_prime=map[i][j]; 148 } 149 else if(value[i][j]=Max_value){ 150 if(map[i][j]>Max_prime){ 151 Max_prime=map[i][j]; 152 } 153 } 154 } 155 } 156 if(direction) break; 157 if(l-1>0 && map[i+1][l-1]<=last) l--; 158 else if(l-1>0 && map[i+1][l]>last) l++; 159 160 if(r+1<999 && map[i+1][r+1]<=last) r++; 161 } 162 printf("%d %d\n",Max_value,Max_prime); 163 } 164 free(cave); 165 return 0; 166 167}

結果

PS C:\Users\rokok\pro\proc\01> ./AtCoder
PS C:\Users\rokok\pro\proc\01>

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

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

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

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

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

guest

回答2

0

ベストアンサー

else if(value[i][j]=Max_value){ 比較が代入になっている
flag が使われていないのに宣言されている
l, last, topが初期化されていない

投稿2020/07/05 13:53

ozwk

総合スコア13521

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

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

grape_ll

2020/07/06 01:53

ご指摘ありがとうございました. 直してみたところ,途中で挟んだprintfが動いたので解決しました.ありがとうございました.
ozwk

2020/07/06 02:19 編集

ちなみにこの回答、コンパイラが出したワーニングを日本語にしただけです。 ちゃんとコンパイラの話を聞いてあげてください
grape_ll

2020/07/06 11:04

自分がvscodeでコンパイラしたときには何も表示されなかったのですが.コンパイラするものによって出てくるものが違うということでしょうか. いずれにしろ,次からは気を付けたいと思います.
guest

0

まず、2つの配列が大きすぎるようなので、これをグローバル変数としましょう。
それでどうなるでしょうか。

投稿2020/07/05 13:46

y_waiwai

総合スコア87774

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

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

grape_ll

2020/07/06 01:54

グローバル変数にしてみたところしっかり動いてくれました. ご指摘ありがとうございました.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問