小吕编码 2021-04-10 09:04 采纳率: 50%
浏览 109

天梯赛练习集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;
}

这是运行结果

  • 写回答

1条回答 默认 最新

  • a5156520 2023-04-26 11:21
    关注

    应该是因为字符数组的结束下标错了,应该是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

    评论 编辑记录

报告相同问题?

悬赏问题

  • ¥200 csgo2的viewmatrix值是否还有别的获取方式
  • ¥15 Stable Diffusion,用Ebsynth utility在视频选帧图重绘,第一步报错,蒙版和帧图没法生成,怎么处理啊
  • ¥15 请把下列每一行代码完整地读懂并注释出来
  • ¥15 pycharm运行main文件,显示没有conda环境
  • ¥15 易优eyoucms关于二级栏目调用的问题
  • ¥15 寻找公式识别开发,自动识别整页文档、图像公式的软件
  • ¥15 为什么eclipse不能再下载了?
  • ¥15 编辑cmake lists 明明写了project项目名,但是还是报错怎么回事
  • ¥15 关于#计算机视觉#的问题:求一份高质量桥梁多病害数据集
  • ¥15 特定网页无法访问,已排除网页问题