【问题标题】:Variable sized array可变大小的数组
【发布时间】:2017-06-16 22:30:02
【问题描述】:

所以,我在 hakerrank 上遇到了一个编码问题。问题出在链接https://www.hackerrank.com/challenges/variable-sized-arrays 我在 C++ 中的代码如下,

#include<stdio.h>
#include<stdlib.h>
using namespace std;

main() {
  int n, q;
  scanf("%d %d", &n, &q);
  int **a = new int*[n];
  int k;
  for (int i = 0; i < n; i ++) {
    scanf("%d", &k);
    int *c = new int[k];
    for (int j = 0; j < k; j ++) {
      scanf("%d", &c[i]);
    }
    a[i] = c;
  }

  int s, f, *z;
  for (int i = 0; i < q; i ++) {
    scanf("%d %d", &s, &f);
    z = a[s];
    printf("%d\n", z[f]);
  }
}

每次运行时,它都会显示垃圾值。请帮助我。

【问题讨论】:

  • main() 无效 --> int main ( void ) 至少
  • @LPs OP 将依赖于编译器扩展;在线“编码挑战”通常接受编译器在默认模式下接受的任何内容,通常包括一堆奇怪的扩展
  • 我们不是在线调试服务。
  • 为了改进问题,在问题中显示输入(而不是链接到它)
  • 为避免此类错误,请使用更具描述性的变量名称。使用 1 个字母表示所有内容并不会让您成为一个很酷的黑客

标签: c++ arrays


【解决方案1】:

您混淆了索引。 scanf("%d", &amp;c[i]) 应该是 scanf("%d", &amp;c[j])

【讨论】:

    【解决方案2】:

    您将很多 C 与 C++ 混合在一起。看起来您正在尝试实现具有可变二维的二维数组。尝试以下程序,对您的代码稍作修改:

    #include<iostream>
    
    using namespace std;
    int main()
    {
        int n, q;
        cout<<"Enter the rows : \n" ;
        cin>>n>>q;
        int **a = new int*[n];
        int k;
        for (int i = 0; i<n; i++)
        {
            cout<<"Enter the column : \n" ;
            cin>>k;
            int *c = new int[k];
            for (int j = 0; j<k; j++)
            {
                cout<<"Enter the value["<<j<<"] : \n";
                cin>>c[j];
            }
    
            a[i] = c;
        }
        int s, f, *z;
        for (int i = 0; i<q; i++)
        {
            cout<<"Enter the row and column to print : \n" ;
            cin>>s>>f;
            z = a[s];
            cout<<z[f]<<endl;
        }
        return 0;
    }
    

    仅供参考:您仍然需要添加适当的错误处理方案。

    【讨论】:

    • main 应该有 int 返回类型,其他一切都可以。
    猜你喜欢
    • 1970-01-01
    • 2018-06-01
    • 2016-09-17
    • 2018-07-29
    • 2019-12-02
    • 2013-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多