zoukankan      html  css  js  c++  java
  • 输出环形数组最大子数组的和

    要求:
    输入一个整形数组,数组里有正数也有负数。
    数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
    如果数组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("&&&&&&&四则运算&&&&&&& 请看题 ");

    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("回答正确! ");
    add+=10;
    }
    else
    printf("错误,正确答案: %d ",c[num]);
    num++;
    if(num==10) break;
    }
    printf(" 得分:%d &&&&&&&加油吧,骚年!&&&&&&&",add);
    getch();
    }

  • 相关阅读:
    设计模式第四篇-工厂模式
    设计模式第三篇-装饰者模式
    设计模式第二篇-观察者模式
    设计模式第一篇-策略模式
    一元多项式的加/减法运算
    圆桌问题
    求有序序列的交集(链表)
    悲剧文本
    求序列的交集(链表)
    集合的操作
  • 原文地址:https://www.cnblogs.com/w-t-c/p/9915584.html
Copyright © 2011-2022 走看看