问题描述
- 请教C语言的问题解决方案
-
数组求和,这个好像不能够运行,但是提交代码可以,而且加入了getch();和system pause;试过了也不行!
#include
#include
void Print(int*data,int n)
{ int i;
for(i=0;i<n;i++)
{printf("%d",data[i]);
} printf("n"); }
int Split(int *data,int pre,int rear)
{
int value=data[pre];
while(pre
{
while(data[rear]>=value && pre<rear) rear--;data[pre]=data[rear];
while(data[pre]<value && pre<rear) pre++;
data[rear]=data[pre];
}
data[pre]=value;
return pre;
}
//快速排序
void QuickSort(int *data,int pre,int rear)
{if(pre<rear)
{ int mid=Split(data,pre,rear);
QuickSort(data,pre,mid-1);QuickSort(data,mid+1,rear);
}}
int main()
{
int i,n;
int data;
scanf("%d",&n);
data=(int)malloc(sizeof(int)*n);
for(i=0;i<n;i++)
{
scanf("%d",&data[i]);} } QuickSort(data,0,n-1); Print("data,n"); getch(); return 0;
}
还有一个能提交但是不能运行,getch();用过了也不行!Fibonacci数列的
#include
#define N 1000001
#define M 10007
int main()
{
int a[N],i,n;
scanf("%d",&n);
a[1]=1;a[2]=1;
for(i=3;i<=n;i++)
a[i]=(a[i-1]+a[i-2])%M;
printf("%d",a[n]);
getch();
return 0;
}
解决方案
int a[N] 这个数组定义的也太大了吧,已经超过 VC 或 VS 系统编译工具的默认设置,这样的程序运行不起来也是正常的。
可以考虑将 a 所需要的内存动态分配:malloc / new 都可以的。
解决方案二:
int a[N]把他定义成全局的
解决方案三:
定义的数组有点大了,定义成全局的
解决方案四:
int main()
{
int a,i,n;
scanf("%d",&n);
a = (int)malloc(n*sizeof(int));
a[1]=1;a[2]=1;
for(i=3;i<=n;i++)
a[i]=(a[i-1]+a[i-2])%M;
printf("%d",a[n]);
getch();
free(a);
return 0;
}
数组a动态分配比较好。
解决方案五:
第二个是因为数组是连续存储的,你申请的内存过大,没有这么多,可能导致越界,我把数改小了,是可以运行的,如果你非要用这么大的数,可以用链表存储
解决方案六:
你这个是斐波那契数列对吧,我记得通项公式是an=1/根号5((1+根号5之和/2)的n次方-(1-根号5之差/2)的n次方),n=1,2,3...
用这个公式行不行啊???