这个问题来自spoj。有关问题,请参阅this。 你会看到我的逻辑很简单。如果我将动态形式的数组大小更改为静态大小,代码将执行并请求整数,并且无限期地继续执行,同时应运行测试用例的数量。但是,如果我保持动态,我会不断收到此持久性错误:file_name.exe已停止工作。
另外请注意我的代码。
#include <stdio.h>
#include <conio.h>
int main()
{
int n, i, count, k, tcs, j, l, m;
scanf("%d", tcs);
int fact[tcs];
int arr[tcs];
for (j = 0; j < tcs; j++) {
scanf("%d", &arr[j]);
}
int calc_fact(n) {
if (n == 1)
return 1;
else
return n * calc_fact(n - 1);
}
j = 0;
m = 0;
while (m < tcs && j < tcs) {
fact[m] = calc_fact(arr[j]);
m++;
j++;
}
m = 0;
for (l = 0; l < tcs; l++) {
i = 1;
count = 0;
while (i <= fact[m]) {
if ((fact[m]) % i == 0)
count++;
i++;
}
m++;
k = (count) % ((10 ^ 9) + 7);
printf("\n%d", k);
}
return 0;
}
答案 0 :(得分:0)
假设您使用的是C ++,您需要在代码中更改一些内容:
scanf("%d", tcs);
应该是scanf("%d", &tcs);
这个错误是您的程序崩溃的原因,因为tcs
没有正确的预期价值。int calc_fact(n)
应位于带有原型int calc_fact(int n)
的main()函数之外。由于这个错误,您的代码首先不会编译(当您说静态声明数组时,您是否确定代码符合要求)?请参阅以下修改后的代码:
#include <stdio.h>
//#include <conio.h> //You actually don't need it.
int calc_fact(int n)
{
if(n==1)
return 1;
else
return n*calc_fact(n-1);
}
int main()
{
int n, i, count, k, tcs, j, l, m;
scanf("%d", &tcs);
int fact[tcs];
int arr[tcs];
for(j=0; j<tcs; j++)
{
scanf("%d", &arr[j]);
}
j=0;
m=0;
while(m<tcs && j<tcs)
{
fact[m]=calc_fact(arr[j]);
m++;
j++;
}
m=0;
for(l=0; l<tcs; l++)
{
i=1;
count=0;
while(i<=fact[m])
{
if((fact[m])%i==0)
count++;
i++;
}
m++;
k=(count)%((10^9)+7);
printf("%d\n", k); //and not printf("\n%d", k);
}
return 0;
}
工作代码here。