1. 程式人生 > >小呆呆組四則運算(可檢驗評分)

小呆呆組四則運算(可檢驗評分)

要求:
輸入一個整形陣列,數組裡有正數也有負數。
陣列中連續的一個或多個整陣列成一個子陣列,每個子陣列都有一個和。
如果陣列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。

 

遇到的問題:沒有在while函式之前加上srand函式,導致第二以及以後次做題時,題目與第一次重複。

 

程式:

#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();
}