邢台移动网站建设价格,ps手绘网站有哪些,昆明大型网站建设费用,网站广告条怎么做题目#xff1a;来源http://noi.openjudge.cn/ch0112/09/ 总时间限制: 1000ms内存限制: 65536kB描述给定m行n列的图像各像素点灰度值#xff0c;对其依次进行一系列操作后#xff0c;求最终图像。 其中#xff0c;可能的操作及对应字符有如下四种#xff1a; A#xff1a…题目来源http://noi.openjudge.cn/ch0112/09/ 总时间限制: 1000ms内存限制: 65536kB描述 给定m行n列的图像各像素点灰度值对其依次进行一系列操作后求最终图像。 其中可能的操作及对应字符有如下四种 A顺时针旋转90度 B逆时针旋转90度 C左右翻转 D上下翻转。 输入第一行包含两个正整数m和n表示图像的行数和列数中间用单个空格隔开。1 m 100, 1 n 100。接下来m行每行n个整数表示图像中每个像素点的灰度值相邻两个数之间用单个空格隔开。灰度值范围在0到255之间。接下来一行包含由A、B、C、D组成的字符串s表示需要按顺序执行的操作序列。s的长度在1到100之间。输出m行每行包含n个整数为最终图像各像素点的灰度值。其中m为最终图像的行数n为最终图像的列数。相邻两个整数之间用单个空格隔开。样例输入 2 3
10 0 10
100 100 10
AC 解析 题目要求转换最终的结果。分析题目发现它的变换情况只有两种旋转、翻转轴对称。 通过我们自己的想象可以知道 无论图形按照ABCD的命令怎么变换最终也只会有八种形态 1.不翻转顺时针旋转0°即不变 2.不翻转顺时针旋转90° 3.不翻转顺时针旋转180° 4.不翻转顺时针旋转2700° 5.按某一个方向翻转后顺时针旋转0° 6.按某一个方向翻转后顺时针旋转90° 7.按某一个方向翻转后顺时针旋转180° 8.按某一个方向翻转后顺时针旋转270° 为了方便我们同一将 “按某一个方向翻转” 改为 “按图形左边缘为对称轴进行轴对称” 于是我们可以画出图形经过翻转后的八种形态对于我这个懒人拿一张纸直接变换是懒得用脑子想象的一种好方法。1 2 3 4 123 741 987 369456 852 654 258789 963 321 147 5 6 7 8 321 963 789 147654 852 456 258987 741 123 369 最朴素的算法就是按照命令的形式一次一次地翻转图形但是这很耗时间基本上就别想Accept了。 我们在此基础上做了点改进 按照命令的形式一次一次地翻转“图形的形态” ——什么意思我们可以把图形每种样子做一个编码就像警察发通缉令有时候嫌疑人的照片一张不够戴牛仔帽的穿夹克的叼雪茄的……我们也是如此如上图所示。 我们在一个函数中完成对命令的解析传回图形最后的形态给它一顿最后的晚餐~~。 之后也有一种优化的方法 原来我们想着就直接把图形真正做一个变换但是如果图形太大这也很耗时间 所以我们不妨从输出下手改变输出的顺序来达到变换图形的效果。代码为人类造福 1 #include stdio.h2 #include string.h3 struct command{4 char str[101];5 int length;6 };7 int ExplainCommand(struct command s);8 void Print(int *pho,int way,int height,int width);9 int main()10 {11 int m,n,i,j;12 int pho[10000];13 struct command s;14 15 16 scanf(%d%d,m,n);17 for(i0;im;i)18 {19 for(j0;jn;j)20 {21 scanf(%d,pho[i*nj]);22 }23 }24 getchar();25 gets(s.str);26 s.lengthstrlen(s.str);27 28 Print(pho,ExplainCommand(s),m,n);29 30 return 0;31 }32 int ExplainCommand(struct command s)//对命令行做解析分析出最终的形态 33 {34 int ans1;//假定目前最终形态为不变35 int i;36 for(i0;is.length;i)37 {38 if(s.str[i]A)39 {40 switch(ans)41 {42 case 1: ans2 ;break;43 case 2: ans3 ;break;44 case 3: ans4 ;break;45 case 4: ans1 ;break;46 case 5: ans6 ;break;47 case 6: ans7 ;break;48 case 7: ans8 ;break;49 case 8: ans5 ;break;50 }51 }52 53 else if(s.str[i]B)54 {55 switch(ans)56 {57 case 1: ans4 ;break;58 case 2: ans1 ;break;59 case 3: ans2 ;break;60 case 4: ans3 ;break;61 case 5: ans8 ;break;62 case 6: ans5 ;break;63 case 7: ans6 ;break;64 case 8: ans7 ;break;65 }66 }67 else if(s.str[i]C)68 {69 switch(ans)70 {71 case 1: ans5 ;break;72 case 2: ans8 ;break;73 case 3: ans7 ;break;74 case 4: ans6 ;break;75 case 5: ans1 ;break;76 case 6: ans4 ;break;77 case 7: ans3 ;break;78 case 8: ans2 ;break;79 }80 }81 else if(s.str[i]D)82 {83 switch(ans)84 {85 case 1: ans7 ;break;86 case 2: ans6 ;break;87 case 3: ans5 ;break;88 case 4: ans8 ;break;89 case 5: ans3 ;break;90 case 6: ans2 ;break;91 case 7: ans1 ;break;92 case 8: ans4 ;break;93 }94 }95 } 96 return ans;97 }98 void Print(int *pho,int way,int height,int width)99 {
100 /*图形经过各种旋转变换后最后的形态只有8种
101 *前四种
102 *1未翻转顺时针旋转 0
103 *2未翻转顺时针旋转 90
104 *3未翻转顺时针旋转 180
105 *4未翻转顺时针旋转 270
106 *后四种
107 *5以图形左边为对称轴对称顺时针旋转 0
108 *6以图形左边为对称轴对称顺时针旋转 90
109 *7以图形左边为对称轴对称顺时针旋转 180
110 *8以图形左边为对称轴对称顺时针旋转 270
111 */
112 int i,j,temp;
113
114
115 if(way1)
116 {
117 for(i0;iheight;i)
118 {
119 for(j0;jwidth;j)
120 {
121 temp*(phoi*widthj);
122 printf(%d ,temp);
123 }
124 printf(\n);
125 }
126 }
127
128
129 else if(way2)
130 {
131 for(j0;jwidth;j)
132 {
133 for(iheight-1;i0;i--)
134 {
135 temp*(phoi*widthj);
136 printf(%d ,temp);
137 }
138 printf(\n);
139 }
140 }
141
142
143 else if(way3)
144 {
145 for(iheight-1;i0;i--)
146 {
147 for(jwidth-1;j0;j--)
148 {
149 temp*(phoi*widthj);
150 printf(%d ,temp);
151 }
152 printf(\n);
153 }
154 }
155
156
157 else if(way4)
158 {
159 for(jwidth-1;j0;j--)
160 {
161 for(i0;iheight;i)
162 {
163 temp*(phoi*widthj);
164 printf(%d ,temp);
165 }
166 printf(\n);
167 }
168
169 }
170
171
172 else if(way5)
173 {
174 for(i0;iheight;i)
175 {
176 for(jwidth-1;j0;j--)
177 {
178 temp*(phoi*widthj);
179 printf(%d ,temp);
180 }
181 printf(\n);
182 }
183 }
184
185
186 else if(way6)
187 {
188 for(jwidth-1;j0;j--)
189 {
190 for(iheight-1;i0;i--)
191 {
192 temp*(phoi*widthj);
193 printf(%d ,temp);
194 }
195 printf(\n);
196 }
197 }
198
199
200 else if(way7)
201 {
202 for(iheight-1;i0;i--)
203 {
204 for(j0;jwidth;j)
205 {
206 temp*(phoi*widthj);
207 printf(%d ,temp);
208 }
209 printf(\n);
210 }
211 }
212
213
214 else if(way8)
215 {
216 for(j0;jwidth;j)
217 {
218 for(i0;iheight;i)
219 {
220 temp*(phoi*widthj);
221 printf(%d ,temp);
222 }
223 printf(\n);
224 }
225 }
226
227 return ;
228 } 不点开就不用花钱 请不要问我为什么不用二维数组——因为在传参数的时候真心不好用…… 即使是用指针也如此因为我不会呀~~ 转载于:https://www.cnblogs.com/CXSheng/p/4889241.html