栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

CSP202109-1数组推导(C/C++)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

CSP202109-1数组推导(C/C++)

CSP202109-1数组推导

题目:

思路:

很简单,因为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;if)
		{
			f=B[i];
			SumMin+=f;
		}
	} 
	printf("%dn",SumMax);
	printf("%dn",SumMin);

	return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/628762.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号