输出环形数组最大子数组的和

时间:2022-09-03 08:25:19

要求:
输入一个整形数组,数组里有正数也有负数。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
如果数组A[0]……A[j-1]首尾相邻,允许A[i-1], …… A[n-1], A[0]……A[j-1]之和最大。
同时返回最大子数组的位置。
求所有子数组的和的最大值。

 

设计思路:

1·随机生成一个数组。

2·通过for循环语句,让计算机从第一个数开始逐个开始向后遍历。

3·由于是一个环形数组,故遍历是有限次数。遍历次数是数组长度-1。

4·每一次遍历的值赋值给max,通过一次次比较,最终的max就是环形数组最大子数组的和。

5·输出这个max。

 

遇到的问题:几次循环int 的未知数重复了,以为上次循环定义了之后就不用再定义,最后发现不是一个循环语句不能用同一个未知数

不然会提示未知定义。

 

程序:

#include<stdlib.h>
#include<stdio.h>
#include<conio.h>
#include<time.h>
void main()
{printf("&&&&&&&四则运算&&&&&&&\n\n请看题\n\n");

int a[10],b[10],d[10],c[10],num=0,result,add=0;
float val;
char fa[5]={'+','-','*','/'};
srand(time(0));
while(1)
{

d[num]=abs(rand())%4;
while(1)
{
c[num]=-1;
a[num]=abs(rand())%201-100;
b[num]=abs(rand())%201-100;
if(d[num]==0) c[num]=a[num]+b[num];
else if(d[num]==1) c[num]=a[num]-b[num];
else if(d[num]==2) c[num]=a[num]*b[num];
else if(d[num]==3)
{
if(b[num]>0)val=1.0*a[num]/b[num];
}
if(d[num]<=2)
{
if(c[num]>=0 && c[num]<=100) break;
}
else
{
if(a[num]==int(val)*b[num])
{c[num]=val; break;}
}
}
num++;
if(num==10) break;
}
/* 回答 */
num=0;
while(1)
{
printf("%d %c %d= ",a[num],fa[d[num]],b[num]);
scanf("%d",&result);
if(result==c[num])
{
printf("回答正确!\n");
add+=10;
}
else
printf("错误,正确答案: %d\n",c[num]);
num++;
if(num==10) break;
}
printf("\n得分:%d\n\n&&&&&&&加油吧,骚年!&&&&&&&",add);
getch();
}

 

 

 

 

 

 

输出环形数组最大子数组的和