我尝试了很多东西,因为我是大学新生,可能会有一些信息可以打破我的限制.. ñ 主要问题是将程序写入计算机D,其中D =Σi= 1(Ai-Bi),注意A和B是一维数组。
我试过这个
<iostream>
main()
{
int N;
cin>>N;
int a[N];
int b[N];
for (i=1; i<=N;i++)
{
cin>> a[i]>> b[i];
但我意识到没有这样的事情,我想使用谁想要帮助的知识,如果这是问题的作者的错误?
答案 0 :(得分:4)
如果执行int a[N]
,则将在编译时分配数组。并且,在这种情况下,N
必须具有常量值,这在此不正确。
您需要动态创建这些数组,如下所示:
int *a = new int[N];
int *b = new int[N];
或者改为使用vector<int>
:
vector<int> a(N);
vector<int> b(N);
已编辑:您的代码的另一个问题是您将从索引处开始的数组视为1,实际上为0。您需要将for
条件更改为:
for (i=0; i<N; i++)
答案 1 :(得分:2)
您的问题可以通过单程算法解决,该算法甚至根本不需要存储任何值,例如:
#include <iostream>
int main()
{
int total = 0;
for (int a, b; std::cin >> a >> b; )
{
total += a - b;
}
std::cout << "D = " << total << "\n";
}
这将尽可能长地从标准输入中读取整数对,例如直到你关闭输入流或输入无法解析的内容。
答案 2 :(得分:1)
您无法使用运行时值声明静态数组。您需要动态分配它们:
int* a = new int[N];
不要忘记在最后解除分配
delete [] a;
答案 3 :(得分:1)
需要在运行时知道数组大小。因此 - 理论上你不能以你想要的方式做你想做的事。但是,您可以使用new
运算符:
int *a = new int[N];
使用矢量:
#include <vector>
std::vector<int> a;
或使用一个小技巧:
int N;
cin>>N;
const int M=N;
int a[M];
最后一个不是标准行为,但是最好不要尝试,除了有趣和使代码不易阅读。
答案 4 :(得分:1)
您无法使用变量声明数组的大小,请尝试使用指针。像:
int *p = new int [N]
答案 5 :(得分:1)
您无法在运行时输入数组的大小,而是使用vector
或尝试使用new
和delete
来创建自己的动态数组实现。
int size ;
cin>> size ;
int arr[size] ; // wrong, size must be known beforehand.
* Solution1 *
Use a vector<int> instead.
* Solution2 *
int size;
cin>>size ;
int * ptr = new int[size] ;
* Solution3 *
//declare a maxSize(maximum limit that you think your array will not exceed)
// a bit memory inefficient
const int MAXSIZE = 20 ;
int arr[MAXSIZE] ;
// now use this array.
答案 6 :(得分:0)
你可以做到
#include <vector>
然后在你的函数中:
int N;
cin >> N;
vector<int> a(N);
vector<int> b(N);
for (i=1; i<=N;i++)
cin >> a[i]>> b[i];
}
答案 7 :(得分:0)
你可以试试这个:
int N;
cin>>N;
int a[] = new int[N];
int b[] = new int[N];
它比使用指针和放大器的版本更简单。载体
注意:它始终是从索引0开始而不是从1开始的更好方法,因为并非所有编译器都会接受它。
答案 8 :(得分:0)