今天给大家推荐一道题目,题干如下~
(本题为自创题,如需提交者,请移步至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;
}
完结撒花~