James0917 2022-07-21 14:01 采纳率: 77.8%
浏览 69
已结题

C++——这是我一生中最勇敢的瞬间

这是我一生中最勇敢的瞬间

总时间限制: 10000ms 单个测试点时间限制: 1000ms 内存限制: 262144kB
描述
  这是我一生中最勇敢的瞬间,我的眼中藏着星点嘴角有弧线。

  在小 L 逃离德伦帝国军团的过程中,德伦帝国军团发起了导弹攻击。不过好在小 L 的身边有大量的山脉可以抵挡导弹的攻击。小 L 提前知道了导弹的高度和山脉的侧视图,小 L 想知道导弹会命中哪座山脉,如果导弹不命中山脉的话请输出 danger。

输入
一行三个整数 N,M,K。代表山脉侧视图的高度宽度和导弹的高度。
下面 N 行是由空格和 * 号组成的长度为 M 的字符串,代表山脉的具体形状,第 i 列即为第 i 座山脉。
1 ≤ N, M ≤ 200,K ≤ N
输出
如果导弹会命中山脉,那么输出山脉的编号(最左面的山脉编号为 1),否则输出 danger。

img

#include<iostream>
#include<string>
using namespace std;
int n,m,k,l;
bool flag=0;
int main(){
    cin>>n>>m>>k;
    rewind(stdin);
    char a[n][m];
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            cin.get(a[i][j]);
            if(a[i][j]=='\n'&&j==0)j--;
            if(a[i][j]=='\n'&&j!=0){
                for(int q=j;q<m;q++){
                    a[i][q]=' ';
                }
            }
        }
    } 
    if(k>m||k<=0){
        cout<<"danger";
        return 0;
    }
    for(int j=0;j<m;j++){
        if(a[n-k][j]==' ')continue;
        else{
            flag=1;
            l=j+1;
            break;
        }
    }
    if(flag==1)cout<<l;
    else cout<<"danger";
    return 0;
}

30分错误代码,请问哪里错了?求高人指点!

  • 写回答

2条回答 默认 最新

  • 於黾 2022-07-21 14:10
    关注

    if(a[i][j]=='\n'&&j==0)j--;
    if(a[i][j]=='\n'&&j!=0){
    这两行代码,你没有写else
    那么你刚把j执行了--操作,j就变成-1了呀
    那么不就直接匹配后面的if了
    你前面的if还有啥意义
    -=-=-=
    人家都告诉你n和m的个数了,那么你就应该能够预先知道哪里会有\n,
    一共n行,每行m+1个字符,最后一个就是\n,不用去判断a[i][j]会是\n

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月21日
  • 已采纳回答 7月21日
  • 创建了问题 7月21日

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。