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

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 求京东批量付款能替代天诚
  • ¥15 slaris 系统断电后,重新开机后一直自动重启
  • ¥15 51寻迹小车定点寻迹
  • ¥15 谁能帮我看看这拒稿理由啥意思啊阿啊
  • ¥15 关于vue2中methods使用call修改this指向的问题
  • ¥15 idea自动补全键位冲突
  • ¥15 请教一下写代码,代码好难
  • ¥15 iis10中如何阻止别人网站重定向到我的网站
  • ¥15 滑块验证码移动速度不一致问题
  • ¥15 Utunbu中vscode下cern root工作台中写的程序root的头文件无法包含