fork(2) download
  1. //8が点、1は点の近傍、0は何もなし
  2. //端は反対側の端につながっている
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <time.h>
  6. #define SIZEX 20
  7. #define SIZEY 80
  8. #define RADIUS 4
  9. #define LEN 100
  10. #define COUNT 70
  11. int main(void) {
  12. // your code goes here
  13. int board[SIZEX][SIZEY]={0};
  14. int listx[LEN]={0};
  15. int listy[LEN]={0};
  16. int i=0;
  17. int j=0;
  18. int k=0;
  19. int count = COUNT;
  20. srand((unsigned)time(NULL));
  21. printf("縦:%d\n横:%d\n",SIZEX,SIZEY);
  22. printf("生成する点の数:%d\n",LEN);
  23. printf("その中から残す点の上限:%d\n",COUNT);
  24. printf("半径:%d\n",RADIUS);
  25. //点の生成
  26. for(i=0;i<LEN;i++){
  27. listx[i] = rand() % SIZEX;
  28. listy[i] = rand() % SIZEY;
  29. }
  30. int d = COUNT;
  31. for(i=0;i<LEN;i++){
  32. if(d==0)
  33. break;
  34. else{
  35. d--;
  36. board[listx[i]][listy[i]]=1;
  37. }
  38. }
  39. printf("\n生成した点をそのまま描画\n");
  40. for(i=0;i<SIZEX;i++){
  41. for(j=0;j<SIZEY;j++){
  42. if(board[i][j]==1){
  43. printf("8");
  44. }
  45. else
  46. printf(" ");
  47. }
  48. printf("\n");
  49. }
  50. for(i=0;i<SIZEX;i++){
  51. for(j=0;j<SIZEY;j++){
  52. board[i][j]=0;
  53. }
  54. }
  55. printf("近傍の塗りつぶし\n");
  56. for(i=0;i<LEN;i++){
  57. int x=listx[i];
  58. int y=listy[i];
  59. //点の上限に達しているか
  60. if(count==0)
  61. break;
  62. //点(x,y)は他の点の近傍か
  63. if(board[x][y]!=0){
  64. listx[i]=-1;
  65. listy[i]=-1;
  66. continue;
  67. }
  68. for(j=x-RADIUS;j<=x+RADIUS;j++){
  69. for(k=y-RADIUS;k<=y+RADIUS;k++){
  70. double a=abs(x-j);
  71. double b=abs(y-k);
  72. //点(x,y)の近傍か(三平方の定理
  73. if((a * a) + (b * b)>(RADIUS * RADIUS)){
  74. continue;
  75. }
  76. int j2=j;
  77. int k2=k;
  78. if(j<0){
  79. j2 += SIZEX;
  80. }
  81. if(j>=SIZEX){
  82. j2 = j % SIZEX;
  83. }
  84. if(k<0){
  85. k2 += SIZEY;
  86. }
  87. if(k>=SIZEY){
  88. k2 = k % SIZEY;
  89. }
  90. //点(x,y)の近傍を1で塗りつぶす
  91. board[j2][k2]=1;
  92. }
  93. }
  94. //点(x,y)
  95. board[x][y]=8;
  96. count--;
  97. }
  98. printf("8:点 1:点の近傍 0:空\n");
  99. for(i=0;i<SIZEX;i++){
  100. for(j=0;j<SIZEY;j++){
  101. printf("%d",board[i][j]);
  102. }
  103. printf("\n");
  104. }
  105. printf("\n");
  106. printf("最終的に残った点の描画\n");
  107. for(i=0;i<SIZEX;i++){
  108. if(i==0){
  109. printf(" ");
  110. for(j=0;j<SIZEY;j++){
  111. printf("%d",j%10);
  112. }
  113. printf("\n");
  114. }
  115. for(j=0;j<SIZEY;j++){
  116. if(j==0){
  117. printf("%d",i%10);
  118. }
  119. if(board[i][j]==8)
  120. printf("8");
  121. else
  122. printf(" ");
  123. }
  124. printf("\n");
  125. }
  126. printf("\n");
  127. printf(" ----y軸+方向\n");
  128. printf("|\n");
  129. printf("|\n");
  130. printf("x軸+方向\n");
  131. printf("残った点の数:%d\n",COUNT-count);
  132. printf("点の位置\n");
  133. int c=1;
  134. for(i=0;i<LEN;i++){
  135. if(listx[i]!=-1 && c<=COUNT){
  136. printf("%2d:%2d個目の点:(x,y)=(%d,%d)\n",i,c,listx[i],listy[i]);
  137. c++;
  138. }
  139. else
  140. printf("%2d:この点は他の点の近傍\n",i);
  141. }
  142. return 0;
  143. }
Success #stdin #stdout 0s 2292KB
stdin
Standard input is empty
stdout
縦:20
横:80
生成する点の数:100
その中から残す点の上限:70
半径:4

生成した点をそのまま描画
                 8      8                                       8               
                                                                      8         
                                             8                                  
                                         8                 8     8              
            8             8                                                     
                 8  8                                                   8       
                   8                        8                  8             8  
8            8               8         8               8      8                 
          8                            8       8                   8            
                                                         8      8               
                                   8  8   8                                     
                                8 8             8                       8    8  
       8   8                      8                            8    8       8   
                                8  8                                    8       
              88                                                   8      8     
                      8                                                  8    8 
             8                     8  8        8  8                8            
                                    8                          8                
       8                   8                                8   8 8             
                           8                            8  8            8       
近傍の塗りつぶし
8:点 1:点の近傍 0:空
11011111111001111811111181111000011111111111111110000100111111111111111111111811
10000111110000111111111111111000011111111111111110011111111111111111118111111111
10000001000000111111111111111100111181111111181111111111111111111111111111111111
00000000000001111111111111111100011111111811111110111111100101111811111111111111
10000000000111111111111111811111011111111111111111111811110011111111111111111111
10000000001111111811118111111111101111111111111111111111110111111111111181111111
11000000001111111111111111111111100011111111811111111111111111111111111111111811
10000000011118111111111111111811111011111111111111811111111111811111111111111111
10000000001111111111111110111111111111181111111111111111111111111118111111111111
10000000011111111110001000111111111111111111111111111111181111111111111111111111
10000000111111111111000000011111111111111110111111111011111111111111111111111111
11000000111111111111001000000111118111111100111181111011111111111111111181111811
10010001111811118111111110000001111111010000011111110001111111181111811111111111
11111100111111111111111111000001111111000000011111110000010011111111111111111111
11111111111111111111111111000000111111100010111111100000000011111111111111111111
11111111111111111111118111100000111111101111111111100000000111111111111118111181
11181111111118111101111111000001111811111111111811110000011111111118111111111111
11111111111111111111111111100000111111111111111111100000111111181111111111111111
11111118111111111111111111110000111111111181111111100000111111111111111111111111
11111111111111111111111111110000011111111111111111000001111811111111111111111111

最終的に残った点の描画
 01234567890123456789012345678901234567890123456789012345678901234567890123456789
0                 8      8                                                    8  
1                                                                      8         
2                                    8        8                                  
3                                         8                       8              
4                          8                          8                          
5                 8    8                                                 8       
6                                            8                                8  
7             8               8                    8           8                 
8                                       8                           8            
9                                                         8                      
0                                                                                
1                                  8             8                       8    8  
2           8    8                                              8    8           
3                                                                                
4                                                                                
5                      8                                                  8    8 
6   8         8                     8           8                   8            
7                                                               8                
8       8                                  8                                     
9                                                           8                    

 ----y軸+方向
|
|
x軸+方向
残った点の数:42
点の位置
 0: 1個目の点:(x,y)=(16,13)
 1: 2個目の点:(x,y)=(16,35)
 2:この点は他の点の近傍
 3: 3個目の点:(x,y)=(11,77)
 4: 4個目の点:(x,y)=(15,78)
 5: 5個目の点:(x,y)=(6,77)
 6: 6個目の点:(x,y)=(3,65)
 7: 7個目の点:(x,y)=(12,11)
 8: 8個目の点:(x,y)=(7,13)
 9: 9個目の点:(x,y)=(4,26)
10:10個目の点:(x,y)=(3,41)
11:この点は他の点の近傍
12:11個目の点:(x,y)=(7,29)
13:12個目の点:(x,y)=(8,39)
14:13個目の点:(x,y)=(7,62)
15:14個目の点:(x,y)=(12,63)
16:この点は他の点の近傍
17:15個目の点:(x,y)=(11,72)
18:16個目の点:(x,y)=(15,22)
19:17個目の点:(x,y)=(1,70)
20:この点は他の点の近傍
21:18個目の点:(x,y)=(8,67)
22:この点は他の点の近傍
23:この点は他の点の近傍
24:19個目の点:(x,y)=(17,63)
25:この点は他の点の近傍
26:この点は他の点の近傍
27:20個目の点:(x,y)=(6,44)
28:この点は他の点の近傍
29:21個目の点:(x,y)=(15,73)
30:この点は他の点の近傍
31:22個目の点:(x,y)=(16,67)
32:23個目の点:(x,y)=(19,59)
33:24個目の点:(x,y)=(11,34)
34:この点は他の点の近傍
35:この点は他の点の近傍
36:この点は他の点の近傍
37:25個目の点:(x,y)=(5,17)
38:26個目の点:(x,y)=(0,24)
39:27個目の点:(x,y)=(9,57)
40:この点は他の点の近傍
41:この点は他の点の近傍
42:28個目の点:(x,y)=(11,48)
43:29個目の点:(x,y)=(0,17)
44:この点は他の点の近傍
45:この点は他の点の近傍
46:この点は他の点の近傍
47:30個目の点:(x,y)=(2,45)
48:この点は他の点の近傍
49:この点は他の点の近傍
50:31個目の点:(x,y)=(18,7)
51:この点は他の点の近傍
52:32個目の点:(x,y)=(16,47)
53:この点は他の点の近傍
54:33個目の点:(x,y)=(12,68)
55:この点は他の点の近傍
56:この点は他の点の近傍
57:この点は他の点の近傍
58:この点は他の点の近傍
59:この点は他の点の近傍
60:この点は他の点の近傍
61:34個目の点:(x,y)=(5,72)
62:この点は他の点の近傍
63:この点は他の点の近傍
64:この点は他の点の近傍
65:この点は他の点の近傍
66:この点は他の点の近傍
67:この点は他の点の近傍
68:この点は他の点の近傍
69:この点は他の点の近傍
70:この点は他の点の近傍
71:この点は他の点の近傍
72:この点は他の点の近傍
73:この点は他の点の近傍
74:この点は他の点の近傍
75:この点は他の点の近傍
76:35個目の点:(x,y)=(12,16)
77:36個目の点:(x,y)=(7,50)
78:この点は他の点の近傍
79:この点は他の点の近傍
80:この点は他の点の近傍
81:この点は他の点の近傍
82:37個目の点:(x,y)=(2,36)
83:この点は他の点の近傍
84:この点は他の点の近傍
85:この点は他の点の近傍
86:38個目の点:(x,y)=(16,3)
87:39個目の点:(x,y)=(18,42)
88:この点は他の点の近傍
89:この点は他の点の近傍
90:この点は他の点の近傍
91:40個目の点:(x,y)=(4,53)
92:この点は他の点の近傍
93:この点は他の点の近傍
94:この点は他の点の近傍
95:41個目の点:(x,y)=(5,22)
96:この点は他の点の近傍
97:この点は他の点の近傍
98:この点は他の点の近傍
99:42個目の点:(x,y)=(0,77)