之前,我是编程方面的新手。我实际上是一名高中生,因此我的问题听起来很愚蠢。 我想创建一个数组,其中每个元素都是数字的除数和下一个元素的除数:例如对于n = 12
1 2 6 12
我的解决方案:
#include <iostream>
using namespace std;
int main()
{
int n, d, i, j, a[100];
cin>>n;
for(d=n; d>=1; d--)
{
if(n%d==0)
j++;
}
for(i=1; i<=j; i++)
{
for(d=n; d>=1; d--)
{
if(n%d==0)
a[i]=n%d;
}
}
for(i=1; i<=j; i++)
{
cout<<a[1];
if(a[i]%a[i+1]==0)
cout<<a[i+1]<<" ";
}
return 0;
}
它给我以下错误:-1073741676(0xC0000094)
对此问题的解决方案将不胜感激。我是这个社区的新手,自从进入高中后,我就对编程真正产生了热情。谢谢:)
答案 0 :(得分:1)
j 用于包括在 a 中计算索引,但是它从未在您的 main
中初始化在
if(a[i]%a[i+1]==0)
您通过进行if(n%d==0) a[i]=n%d;
初始化 a ,因此a[i+1]
始终为0,因此模始终无效。
此外,由于仅初始化 a 直到索引 j ,所以当 i 时,您将使用a[i+1]
来访问未初始化的值是 j
可能是:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int n;
if (!(cin >> n))
return -1;
if (n == 0) {
cout << "there are an infinite number of solution for 0" << endl;
return -1;
}
vector<int> v;
// 1 is a first value
v.push_back(1);
int max = (n > 0) ? n : -n;
for (int d = 2; d <= max; ++d) {
if ((n % d) == 0) {
// can be a candidate, check if compatible with last value
if ((d % v.back()) == 0)
v.push_back(d);
}
}
for (vector<int>::const_iterator it = v.begin(); it != v.end(); ++it)
cout << *it << ' ';
cout << endl;
return 0;
}
我们在C ++中,所以我使用 vector 而不是具有最大大小的C数组
我检查读取的数字,并绕过0的情况,我还处理输入数字为负的情况以停止搜索,并决定使用正值。
编译和执行:
pi@raspberrypi:/tmp $ g++ -pedantic -Wextra v.cc
pi@raspberrypi:/tmp $ ./a.out
12
1 2 4 12
pi@raspberrypi:/tmp $
请注意,如果我从数字而不是从1开始搜索,则会给出其他值:
#include <iostream>
#include <list>
using namespace std;
int main()
{
int n;
if (!(cin >> n))
return -1;
if (n == 0) {
cout << "there are an infinite number of solution for 0" << endl;
return -1;
}
list<int> v;
// the number itself is a first value
v.push_back(n);
for (int d = ((n > 0) ? n : -n) - 1; d != 0; --d) {
if ((n % d) == 0) {
// can be a candidate, check if compatible with first value
if ((v.front() % d) == 0)
v.push_front(d);
}
}
for (list<int>::const_iterator it = v.begin(); it != v.end(); ++it)
cout << *it << ' ';
cout << endl;
return 0;
}
那一次我使用 list 到push_front
时,仍然可以使用 vector 将值与第一个版本相反
编译和执行:
pi@raspberrypi:/tmp $ g++ -pedantic -Wextra vv.cc
pi@raspberrypi:/tmp $ ./a.out
12
1 3 6 12