算他的∑!

这篇博客介绍了一道自创的C++编程题目,涉及三种不同的求和模式:1) 求一组非零数字的和;2) 求在特定范围内的所有数字之和;3) 找出一组数字中最大和最小值的和。博主分享了解题思路和代码实现,提醒注意输入效率以避免超时。
摘要由CSDN通过智能技术生成
今天给大家推荐一道题目,题干如下~
(本题为自创题,如需提交者,请移步至103.100.208.52题目处提交,题号1101)

算他的∑!

Description

小明升到初中啦,数学老师一上来叽里呱啦一通讲,把小明搞得云里雾里,直到下课才回想起老师说的啥,∑!等等,这是哈?哦哦哦哦哦,这个……这个……是3反过来!!!! 数学老师:”你真是在’无中生有,暗度陈仓,凭空捏造,凭空想象,胡言乱语,无可救药……’”(╮(╯▽╰)╭) Ke,ke还是说正事吧,∑的意思是求和,读作‘西格玛’现在你要做的就是编一个程序…… 本程序有多组数据。
(敲黑板!敲黑板!)(〃’▽’〃)—| (sky老师:你敢给我写成单组数据我就把你揍成照片!)[○・`Д´・ ○] 程序会先读取一个r,根据r的量来决定程序之后的走向,反正,总而言之,言而总之,程序有3种模式。 当r=1,程序会再读取几个数,直到为输入为0,再输出他们的和。 当r=2,程序会读取a和b,输出>=a,<=b的所有数的和。 当r=3,程序会持续读取,直到为0,输出他们之中最最最大的与最最最小的数的和。(最多读取1000000条)

Input

输入一个r,再根据模式读取

Output

输出相应的数

Sample Input

2
1 100

3
1 4 2 5 7 0

1
1 3 2 6 6 7

Sample Output

5050

8

25

好了,题干叙述完毕,接下来咱开始解题啦~

首先,咱可以清楚的看到这是一道很烦很烦的模拟(虽然说这是我自己的题,但是我在写标准代码的时候入了好几次坑)。为什么说他烦呢?因为他是有着三种模式,1是求n数和,2是求ab之间数和,3是最大最小和。我们来列三个数组,走起!

NO.1

//r==1;
void one()
{
	int a,ans;
	ans=0;
	cin>>a;
	if(a!=0)//若为0,则停止
	{
		ans+=a;
		while(cin>>a)
		{
			if(a!=0)
			{
				ans+=a;
			}
			if(a==0)
			{
				break;
			}
		}
	}
	cout<<ans<<endl;
}

你慢着,先别复制,这是——入坑代码~
若你不信,请尊自便行(TLE:快提交!)

因为这个是cin,数据不允许啊,几万组数据一下输进去,马上T掉送你去见祖宗。所以,咱改这么一下~

//r==1;
//OK code
void one()
{
	int a,ans;
	ans=0;
	while(scanf("%d",&a)!=0)//若为0,则停止
	{
		if(a!=0)
		{
			ans+=a;
		}
		if(a==0)
		{
			break;
		}
	}
	cout<<ans<<endl;
}

怎么样,代码都短了许多吧,接下来咱看第二种情况~

第二种简简单单滴,咱刚学for()语句时就是这样滴嘛~

NO.2

//r==2
//OK code
void two()
{
	int a,b;
	cin>>a>>b;
	int ans=0;
	for(int i=a;i<=b;i++)
	{
		ans+=i;
	}
	cout<<ans<<endl;
}

好啦,OK,这总不需要我解释了吧,炒鸡简单的。

接下来是r==3的情况,需要定mi和mx,废话不说了,代码之中自己体会~

NO.3

//r==3
//OK code
void three()
{
	int a,mx,mi;
	mi=999999999;
	mx=-999999999;
	while(scanf("%d",&a)!=0)
	{
		if(a!=0)
        {
            if(a<mi)
            {
                mi=a;
            }
            if(a>mx)
            {
                mx=a;
            }
        }
        if(a==0)
        {
            break;
        }
	}
	cout<<mi+mx<<endl;
}

最终代码!!!

#include<bits/stdc++.h>
using namespace std;
void one();
void two();
void three();
int main()
{
	int r;
	while(cin>>r)
	{
		if(r==1) one();
		if(r==2) two();
		if(r==3) three();
	}
	return 0;
}
void one()
{
	int a,ans;
	ans=0;
	while(scanf("%d",&a)!=0)
	{
		if(a!=0)
		{
			ans+=a;
		}
		if(a==0)
		{
			break;
		}
	}
	cout<<ans<<endl;
}
void two()
{
	int a,b;
	cin>>a>>b;
	int ans=0;
	for(int i=a;i<=b;i++)
	{
		ans+=i;
	}
	cout<<ans<<endl;
}
void three()
{
	int a,mx,mi;
	mi=999999999;
	mx=-999999999;
	while(scanf("%d",&a)!=0)
	{
		if(a!=0)
        {
            if(a<mi)
            {
                mi=a;
            }
            if(a>mx)
            {
                mx=a;
            }
        }
        if(a==0)
        {
            break;
        }
	}
	cout<<mi+mx<<endl;
}

完结撒花~
2020

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值