###質問内容
素数洞穴という問題をといていたのですが,実行しても何も入力することも出来ず,表示もされません.ほんとに最初の部分が間違っているということだと思うのですが,自分ではどこが間違っているのかわかりませんでしたので,指摘していただきたいです.
コード
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>
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/06 01:53
2020/07/06 02:19 編集
2020/07/06 11:04