题目描述
    输入一个正整数 n,并输出一个沙漏形,这个沙漏形有 2n+1 行,第一行有 2n+1 个字母,其中前 n+1 个字符是从 A 开始依次递增的,而后 n 个字符是由第 n+1 个字符开始依次递减的。之后的 n 行每行会少头尾两个字母。再之后的 n 行则正好是前 n 行反过来输出的结果。注意末尾不要有多余的输出。
    输入
    输入一个正整数 n。(0输出
    按照样例输出。

    样例输入
    2
    样例输出
    ABCBA
    BCB
    C
    BCB
    ABCBA
    样例输入2
    3
    样例输出2
    ABCDCBA
    BCDCB
    CDC
    D
    CDC
    BCDCB
    ABCDCBA
    数据规模与约定
    时间限制:1 s

    内存限制:256 M

    100% 的数据保证 0入门组循环字符

    这道OJ题还是花了很长时间来完成的,那么为了后续在回忆时有个依照,也为看到这道题同样没有思路的朋友,提供个思路。

    思路如下:

    1.判断输出的行数

    1. for(int i=0;i<(2*n+1);i++);

    2.输出字母前如何空格:

    1. //对是否要输出空格做判定
    2. e=i<(n+1)?i:--e;
    3. k=e;
    4. while(k){
    5. printf(" ");
    6. k--;
    7. }

    3.沙漏上半部分

    1. if(i<=n){
    2. //沙漏上半部分
    3. //对每行输出多少字母做判定
    4. for(int j=0;j<2*abs(n-i)+1;j++){
    5. //对每行输出递增字母做判断
    6. printf("%c",c+'A');
    7. if(j<abs(n-i)){
    8. ++c;
    9. }else{
    10. --c;
    11. }
    12. }
    13. printf("\n");
    14. if(i != n)
    15. c+=2;
    16. }

    4.沙漏下半部分

    1. //对每行输出多少字母做判定
    2. for(int j=0;j<2*abs(n-i)+1;j++){
    3. //对每行输出递增字母做判断
    4. printf("%c",c+'A');
    5. if(j<abs(n-i)){
    6. ++c;
    7. }else{
    8. --c;
    9. }
    10. }
    11. printf("\n");

    完整代码:

    1. #include<stdio.h>
    2. int abs(int n){
    3. if(n<0)
    4. return -n;
    5. }
    6. int main(){
    7. int n=0,c=0,e=0,k=0;
    8. scanf("%d",&n);
    9. for(int i=0;i<(2*n+1);i++){//输出的行数
    10. //对是否要输出空格做判定
    11. e=i<(n+1)?i:--e;
    12. k=e;
    13. while(k){
    14. printf(" ");
    15. k--;
    16. }
    17. if(i<=n){//沙漏上半部分
    18. //对每行输出多少字母做判定
    19. for(int j=0;j<2*abs(n-i)+1;j++){
    20. //对每行输出递增字母做判断
    21. printf("%c",c+'A');
    22. if(j<abs(n-i)){
    23. ++c;
    24. }else{
    25. --c;
    26. }
    27. }
    28. printf("\n");
    29. if(i != n)
    30. c+=2;
    31. }else{//沙漏下半部分
    32. //对每行输出多少字母做判定
    33. for(int j=0;j<2*abs(n-i)+1;j++){
    34. //对每行输出递增字母做判断
    35. printf("%c",c+'A');
    36. if(j<abs(n-i)){
    37. ++c;
    38. }else{
    39. --c;
    40. }
    41. }
    42. printf("\n");
    43. }
    44. }
    45. return 0;
    46. }