首页 > 代码库 > 叠筐 HDU - 2074
叠筐 HDU - 2074
找规律的模拟题,细节较多。网上推出的有公式。
除了公式之外,还可以这样看。
这个花框是里外交替的。假设 外 1 层为A的话,接下来外2层就是B,再接下来,外3层为A.....以此类推
层数 t ∈ [ 0,(T+1)/2 )
当 t 为奇数 时 ,最外层为 A ,当 t 为偶数时 最外层为B ,然后层层交替。
处理完之后,再挖去四个角。以空格覆盖之。完毕。
注意事项:
(1)由于数据有多组,注意str字符数组的初始化........
(2)当 N==1 时单独输出。
(3)函数调用里面的str[N-1][i]和str[i][N-1],这里必须N-1。(因为下标从0开始)
(4)函数调用 内层的四个for循环结束后,需要T--,N--;
下面附上代码
#include<stdio.h> #include<string.h> int N; char str[100][100]; char x,y; void check(int ceng,char a,char b) // a 是外层 { int T = ceng-1,xx = N; char c; for(int k = 0; k < ceng; k++) { c = T % 2 ? a : b; for(int i = k; i < N; i++) // 上 str[k][i] = c; for(int i = k; i < N; i++) // 下 str[N-1][i] = c; for(int i = k; i < N; i++) // 左 str[i][k] = c; for(int i = k; i < N; i++) // 右 str[i][N-1] = c; T--; // 推算下一层的字符是谁 N--; // 本层输完了,减一,输它上面的一层 } str[0][0] = ‘ ‘; str[0][xx-1] = ‘ ‘; str[xx-1][0] = ‘ ‘; str[xx-1][xx-1] = ‘ ‘; for(int i = 0; i < xx; i++) printf("%s\n",str[i]); } int main() { int ok = 0; while(scanf(" %d %c %c",&N,&x,&y)!= EOF) { memset(str,0,sizeof(str)); if(ok) printf("\n"); if(N == 1) { printf("%c\n",x); continue; } int t = (N + 1) / 2; check(t,y,x); ok = 1; } return 0; }
叠筐 HDU - 2074
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。