基础练习 字母图形

来源:互联网 发布:推荐电脑防沉迷软件 编辑:程序博客网 时间:2024/06/05 12:21

蓝桥杯题库的一些做题答案,主要是留下一个记录,以便日后的提高


#include<stdio.h>
char zi[26] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O',
    'P','Q','R','S','T','U','V','W','X','Y','Z'}; // 这种可能用ASCII码更好,但是这个比较方便
int max( int a, int b){
 if( a > b)return a;
 else return b;
}
int main(void){
 int n, m;
 scanf("%d%d", &n, &m);
 int i, j;

 for( i = 1; i <= n; i++){                     //这里应该是考虑一个for循环判断顺序的问题

                                                         for的执行顺序是:初始化--判断--函数体—第3句--判断—循环


  if( i <= m){                                     //要考虑m<n的情况,否则会有三个测试点不通过
  for( j = i-1;j >= 1; j--){
   printf("%c",zi[j]);
   }
  }
  else{
   for( j = i-1 ; j >= i - m; j--){
    printf("%c", zi[j]);
   }
  }
  for( j = 0;j <= m-i ; j++){
   printf("%c",zi[j]);
   }
   printf("\n");
  }
}





++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
之后看了一下别人的答案,简单的要哭了
int main()
{
int n, m;
scanf("%d%d", &n, &m);
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= m; j++)
putchar(abs(i - j) + 'A');
putchar(10);
}
return 0;
}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
借用上面的思路,自己又写了一个

#include<stdio.h>int main(void){char zi[26] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K','L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};int m, n;scanf("%d%d", &m, &n);int i, j;for( i = 1; i <= m; i++){for( j = 0; j <= n-1; j++){printf("%c", zi[abs(1-i+j)]);}printf("\n");}return 0;}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2017.2.26复习的时候又想到了一种解法,把
ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC
看成‘A’ = ‘A’ + 0, 'B' = 'A' + 1,转化为
0 1 2 3 4 5 6
1 0 1 2 3 4 5
2...
3...
4...
这样可以用轴对称来解决,如果一定生成数组的话是一个减小再扩大的数组,比较麻烦
但是还有一种想法是将0左边看成负值,这样是一个恒增大的数组
0 1 2 3 4 5 6
-1 0 1 2 3 4 5
-2...
-3...
-4...
    #include<stdio.h>      #include<string.h>      #include<math.h>      int main(void){      int n, m, a[100][100];    char s[100][100];    int j, t, i, flag;    scanf("%d %d", &m, &n);        for( i = 0; i < n; i++){        t = -i;        for( j = 0; j < m; j++){        if(t < 0){        a[i][j] = -t;        // 用于测试的数组        s[i][j] = -t + 'A';        }        else{        a[i][j] = t;        s[i][j] = t + 'A';        }        t++;        }        }        for( i = 0; i < n; i++){        for( j = 0; j < m; j++)        printf("%c ", s[i][j]);        printf("\n");        }        return 0;      }  



0 0