题目:
思路:
很简单,因为A数组中的数是自然数(非负整数),所以B数组中的值是单调不递减的,也就是从B数组下标为1开始,要么要么等于前面的值,要么大于前面的值。
如果B数组一直是递增的,那么证明B数组中的值=A数组中的值,只有这样,B数组才可能一直递增。
这样A数组中值就固定了,就是等于B数组,所以最大和、最小和都是B数组的和。
如果B数组中出现有等于前面一项的情况,那么最大和也是B数组。
算最小和的话,B数组中该项等于前一项,那么为了使和最小,该项就是0。
具体方法就是:算这个的话,需要设置一个标记f,f初始化为B数组的第0项,当B数组中出现比f更大的数时,替换f,然后设定A数组中此项为f的值;没有出现时,此项为0即可。这样可以保证最小和。
注意点:
思路很简单,注意一下输入输出格式,输入格式中需要先输入数组的大小,然后再一行输入B数组的值,中间用空格隔开。这个在C语言中比较恶心,C语言中不能根据n去动态初始化数组,这个就需要用到malloc函数了,动态开辟n大小的空间。然后一行输入数据的话,用scanf先接收到m变量中。然后再赋值到B数组中,getchar吸收一行中的空格这类字符,然后最后回车时跳出循环,OK。
上代码:
#include#include int main() { int n; scanf("%d",&n); int* B; B=(int*)malloc(sizeof(int)*n); int m; char c; for(int i=0;i f) { f=B[i]; SumMin+=f; } } printf("%dn",SumMax); printf("%dn",SumMin); return 0; }



