天梯赛练习集L1-054福到了 的字符问题

自己学的程序出了一点问题,程序的输出和答案差了一行,求助大佬

#include<bits/stdc++.h>
#include<string.h>
using namespace std;

char s[105];

int main(){
	int n;
	char c;
	scanf("%c%d",&c,&n);
	for(int i = 0;i <= n*n;i++){
		scanf("%c",&s[i]);

	}
	
	for(int i = n * n;i >= 0;i--){
		
		if(s[i] == '@')
			printf("%c",c);
		else if(s[i] == ' ')
			printf(" ");
		else if(s[i] == '\n')
			printf("\n");
	}
	return 0;
}

这是运行结果

应该是因为字符数组的结束下标错了,应该是n*(n+1),因为每行还输入了一个换行,所以也要加上,然后再加上判断正向和倒过来的字符图形是否一致的代码,再把数组的长度扩大点就可以了。

修改如下:

参考链接:



#include<bits/stdc++.h>
#include<string.h>
using namespace std;
 

 // https://ask.csdn.net/questions/7415538?spm=1005.2025.3001.5141
char s[10100];  // 规定最多N 不超过100,加上每行后面一个换行,则数组最少需要 N*(N+1)=100*(100+1)=10100
 
int main(){
    int n;
    char c;
    scanf("%c%d",&c,&n);
    //printf("c=%c,n=%d\n",c,n);
    for(int i = 0;i < (n+1)*n;i++){
        scanf("%c",&s[i]);
 
    }
    
    
    int same=1;  // 正向的字符图形和倒过来的字符图形是否一致的标志,默认1表示相同 
    int j=0;
    
    for(int i = 0;i < n*(n+1)/2 ;i++,j++){ // 比较输入的字符图形前半部分与后半部分的字符是否一样 
        
        if(n==1){  //如果只需要了一个字符,则退出,即是与倒过来的字符图形一致 
            break; 
        }
        char start=s[i];  // 前半部分当前位置的字符 
        char end = s[n*(n+1)-1-j];  // 后半部分对应位置的字符 
        
        
        if(start=='\n'){  // 如果前半部分遇到换行,则j--,以便抵消循环迭代的j++ ,然后判断前半部分下一个字符 
            j--;
            continue; 
        }
        
        if(end=='\n'){ // 同上,如果后半部分的字符遇到换行,则i--,以便抵消循环迭代的i++,然后判断后半部分下一个字符 
            i--;
            continue;
        }
        
        if(start!=end){  // 如果前半部分字符和后半部分字符,不相等,则相同标志置0,表示正向和倒过来的字符图形不一致,然后break退出循环 
        //    printf("s[%d]=%c,start=%c,end=%c,s[%d]=%c\n",i,s[i],start,end,n*(n+1)-1-j,s[n*(n+1)-1-j]);
            same=0;
            break;
        }
        
    }
    
    if(same==1){  // 如果图像相同,则打印提示信息 
        printf("bu yong dao le\n");
    }
    
    // 打印从字符数组后半部分开始打印倒置图像 
    for(int i = n * (n+1)-1;i >= 0;i--){
        
        if(s[i] == '@')
            printf("%c",c);
        else if(s[i] == ' ')
            printf(" ");
        else if(s[i] == '\n')
            printf("\n");
    }
    return 0;
}

img