基础练习 字母图形

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


#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;  
    }  



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值