蓝桥杯题库的一些做题答案,主要是留下一个记录,以便日后的提高
#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 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;
}